使用 primefaces 时 <p:selectManyMenu>
在wizard
组件时,按 NEXT 和 BACK 按钮时无法保留所选项目。例如在
<h:outputText value="Roles" />
<p:selectManyMenu id="role" value="#{backingBean.rolesList}"
style="height:75px">
<f:selectItems value="#{backingBean.secRole}" var="roles"
itemLabel="# {roles.roleName}" itemValue="#{roles.roleId}">
</f:selectItems>
</p:selectManyMenu>
itemLabel
当我按 NEXT/BACK 按钮时,所选内容将被刷新。如何保留所选值?
最佳答案
正如我之前的评论中提到的,在使用 JSF ManagedBeans 的 Spring 3 依赖注入(inject)时,@ViewScoped
bean 不起作用。无论您使用注释还是 faces-config.xml 来声明托管 bean,ViewScoped 仍然不会维护对话样式作用域。
我为解决此问题所做的工作是使用 @SessionScoped
代替,但这可能是一个问题,因为下次用户导航到此页面时,之前的状态仍然存在,而您实际上可能会这样希望状态重置。通过在离开页面之前将 actionListener
导航方法上的 bean 属性设置为默认值,可以部分解决此问题。但是,如果用户要在地址栏中手动键入页面,然后返回,这将无济于事。或者,他们可能将您的 Web 应用程序的一个或多个 URL 存储在他们的 Collection 夹或书签中。
解决此问题的更好方法是让其他 RequestScoped bean 或其他页面特定 bean 在创建时找到特定 SessionScoped bean 并调用其公共(public)方法,将 bean 属性重置为其默认值。或者您可以简单地从 session 中完全删除 SessionScoped bean,下次请求时将重新创建它。
关于java - 保留带有primefaces <p :selectManyMenu> while clicking NEXT/BACK of wizard component的选定项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8818268/