Как да обработя prettyfaces 'query-param' в backing bean?

Имам списък с потребители (таблица с данни с връзка на userId, която сочи към /user/view/{userId}). При щракване върху тази userId връзка, браузърът се пренасочва към страницата „изглед“, както се очаква.

Имам страница, която приема URL модела http://localhost:8080/user/view/1 за първия потребител и http://localhost:8080/user/view/2 за втория и т.н., но не знам как да използвам стойността userId, след като тази страница се зареди.

Как мога да постигна това с PrettyFaces URLRewriteFilter? Как мога да заредя данни, използвайки стойността на #{bean.userId} (1,2 и т.н.) от bean bean-а, след като PrettyFaces го е инжектирал при достъп до страницата. Може ли някой да обясни?

<url-mapping id="view">
<pattern value="/user/view/#{bean.userId}/" />
<view-id value="/userview.jsf" />
</url-mapping>

Използвам JSF2+Primefaces.3.0.M3+Prettyfaces-jsf2.3.3.2 с GAE.


person lofa in    schedule 31.01.2012    source източник


Отговори (2)


Имате нужда от действие за зареждане на страница, определено от елемента <action> във вашата конфигурация за съпоставяне на URL адреси. Първо, ще ви трябва метод във вашия bean, като този:

@Named("bean")
@RequestScoped
public class LoginBean {

public String loadLoggedUser() {
    if ( userId != null ) {
        this.user = user.findById(userId);
        return null;
    }
    return "failure";
}
}

Второ, ще трябва да добавите <action> към вашето URL-съпоставяне:

<url-mapping id="view">
     <pattern value="/user/view/#{bean.userId}/" />
     <view-id value="/userview.jsf" />
     <action>#{bean.loadLoggedUser}</action>
</url-mapping>

Тук сме дефинирали действие на страница, което да бъде изпълнено върху bean, #{bean.loadLoggedUser}, когато се поиска URL, съответстващ на нашия модел. Например: /user/view/2.

person Kushan    schedule 31.01.2012

<url-mapping id="login">
        <pattern> /user/view/1 </pattern>
        <view-id> /legacy/user/login.jsp </view-id> <!-- Non JSF View Id -->
    </url-mapping>
    <url-mapping id="register">
        <pattern>/user/view/1 </pattern>
        <view-id>/faces/user/register.jsf</view-id> <!-- JSF View Id -->
    </url-mapping>
<url-mapping id="login1">
        <pattern> /user/view/2 </pattern>
        <view-id> /legacy/user/login2.jsp </view-id> <!-- Non JSF View Id -->
    </url-mapping>
    <url-mapping id="register2">
        <pattern>/user/view/2 </pattern>
        <view-id>/faces/user/register2.jsf</view-id> <!-- JSF View Id -->
    </url-mapping>

вижте http://ocpsoft.com/prettyfaces/

person Hemant Metalia    schedule 31.01.2012
comment
Но имам много потребители. Така че имам нужда от нещо като <pattern> /user/view/#{bean.userId} </pattern>. И аз питах как мога да обработя това #{bean.userId} в backing bean? - person lofa in; 31.01.2012
comment
За да поясня, мисля, че имате предвид, че искам да заредя данни, използвайки стойността на #{bean.userId}, когато страницата е достъпна. - person Lincoln; 02.02.2012