我有一个JSF页面,它加载一个用户,并允许我将角色分配给那个特定的用户。支持Bean, AssignRolesBean
是@RequestScoped
,我希望它保持这样。然而,这是我的问题…
表单提交时调用AssignRolesBean.execute()
。然后返回确认页面的路径。在此确认页面上,我想显示将分配哪些新角色以及将删除哪些角色。但是,我在确认页面上加载用户时遇到了问题。
在初始的AssignRoles页面中,userId是通过GET参数设置的。然后将其作为h:inputHidden
元素添加到页面上。它确实被提交了。但是,在下一页上,没有设置userId(这将加载User)。是否有任何方法可以保留RequestScope而不必在SessionMap中存储userId ?有人告诉我,使用隐藏输入将允许您跨页面获取数据。但是,我遇到了麻烦。
如果你开发jsf2应用,你可以使用flash作用域来传递参数。有关flash作用域的更多信息,请参阅学习JSF2:使用flash作用域
或者您可以将参数放入会话映射
获取sessionMap的代码片段:
FacesContext.getCurrentInstance().getExternalContext().getSessionMap()
将以下内容添加到视图中以对GET请求执行操作:
<f:metadata>
<f:event type="preRenderView" listener="#{bean.init}" />
</f:metadata>
public void init() {
// Request parameters which are set by h:inputHidden, @ManagedProperty
// or f:viewParam are available here.
// You can just do e.g:
this.user = userService.find(userId);
}