我有一个名为的托管bean UserSearchHandler,它有一个doSearch填充的方法,UserSearchHandler.searchResults它显示在userSearch.xhtml页面的表格中.
我有另一个托管bean UserHandler,它有一个showUser方法等等.
在搜索结果表中,用户名是一个链接,单击该链接时,应显示userView.xhtml页面上的用户详细信息.表和链接如下所示:
<p:dataTable var="user" value="#{userSearchHandler.searchResults" >
// ... and so on ... then
<h:commandLink value="#{user.firstName}" action="#{userHandler.showUser}">
<f:setPropertyActionListener target="#{userHandler.userIdToShow}" value="#{profile.id}"/>
</h:commandLink>
Run Code Online (Sandbox Code Playgroud)
当托管bean设置为session范围时,一切正常.
但是,当我更改bean的范围时request,搜索工作并填充表,但是当我点击名称链接时没有任何反应.我在userHandler.showUser方法上设置了一个断点,当它userSearchHandler被设置为"请求"范围时它永远不会被击中.
任何人都可以帮助解释为什么这是,或者我做错了什么?
这是因为#{userSearchHandler.searchResults}在新请求期间它是空的,因此JSF无法找到调用commandlink的相关行,以便调用该操作(并传递/设置属性,如果有的话).
您需要确保#{userSearchHandler.searchResults}在bean的构造/初始化期间预先创建相同的内容.如果要根据一组特定参数创建它,那么您也要将它们与表单一起传递.
这就是为什么存在像Tomahawk <t:saveState />和新的JSF 2.0视图范围这样的解决方案的原因.
| 归档时间: |
|
| 查看次数: |
14847 次 |
| 最近记录: |