java - 保留带有primefaces <p :selectManyMenu> while clicking NEXT/BACK of wizard component的选定项目

标签 java spring google-app-engine jsf-2 primefaces

使用 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/

相关文章:

java - Spring @ExceptionHandler 和多线程

java - Spring测试注解

spring - Spring是否并行初始化bean?

python - 尽管文件显示在存储桶中,但 Blobstore 上传的 get_uploads 返回空列表

google-app-engine - GAE Golang - log.Print()?

java - 在 64 位下调用 throw 时 JNI 代码因核心转储而崩溃

java - 阅读替代代码 JTextArea

java - 使用 PowerMock 进行部分模拟静态

java - JNI getObjectClass 使 VM 崩溃

python - 如何在 GAE 上将类方法作为 deferred.defer 的参数传递