JSF:bean范围; 会话与请求

Rob*_*ume 6 jsf

我有一个名为的托管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被设置为"请求"范围时它永远不会被击中.

任何人都可以帮助解释为什么这是,或者我做错了什么?

Bal*_*usC 5

这是因为#{userSearchHandler.searchResults}在新请求期间它是空的,因此JSF无法找到调用commandlink的相关行,以便调用该操作(并传递/设置属性,如果有的话).

您需要确保#{userSearchHandler.searchResults}在bean的构造/初始化期间预先创建相同的内容.如果要根据一组特定参数创建它,那么您也要将它们与表单一起传递.

这就是为什么存在像Tomahawk <t:saveState />和新的JSF 2.0视图范围这样的解决方案的原因.

也可以看看: