在PrimeFacesJSF2.x中使用请求范围的托管bean

在PrimeFacesJSF2.x中使用请求范围的托管bean,jsf,primefaces,scope,Jsf,Primefaces,Scope,JSF+Primefaces新手。(使用JSF2.1,Primefaces 3.4.2) 我有一个表单,它有一个内部面板组,使用Primefaces commandButton获取数据以填充各种表单组件。partialSubmit解决了尚未填充的字段的验证问题,因此效果良好。该页面按预期运行,但现在我正试图调整实现,使其更“干净” 我的问题与表单使用的支持bean所使用的JSF范围有关。使用会话作用域,一切都很好,但在使用请求作用域时则不然。据我所知,“最终”提交(通过另一个p:commandB

JSF+Primefaces新手。(使用JSF2.1,Primefaces 3.4.2)

我有一个表单,它有一个内部面板组,使用Primefaces commandButton获取数据以填充各种表单组件。partialSubmit解决了尚未填充的字段的验证问题,因此效果良好。该页面按预期运行,但现在我正试图调整实现,使其更“干净”

我的问题与表单使用的支持bean所使用的JSF范围有关。使用会话作用域,一切都很好,但在使用请求作用域时则不然。据我所知,“最终”提交(通过另一个p:commandButton组件)和此获取按钮都在调用提交,因此对其中一个的响应构成请求生命周期的完成。如果我是正确的,它将解释为什么我(使用requst范围)得到以下结果:
java.lang.IllegalStateException:在提交响应后无法创建会话

当使用fetch按钮时

但很明显,这“破坏”了我的意图,即获取请求仅仅导致表单通过bean使用更新的数据

因此,我的理解正确吗?任何使用中间提交(通过partialSubmit=“true”命令按钮(默认情况下启用ajax行为)的设计模式都至少需要使用会话范围的支持bean? 理想情况下,实现请求与导航级别请求的机制将允许在1个请求的上下文中完成这些中间提交。 或者我需要做一些额外的研究吗?(买一本JSF2.x的书,而不是用我的1.2版本?) 任何反馈的MTIA

我的提取组件:

<p:commandButton id="returningBtn" partialSubmit="true" value="Hit if returning" 
    process="nameInfo" actionListener="#{player.loadReturning}" update="registrationForm">
    <p:resetInput target="registrationForm" />
</p:commandButton>

我的最后提交:

<p:commandButton tabindex="0" id="SubmitButton" value="Register"
   action="#{player.register}" update="regPage"/>

partialSubmit解决了尚未填充的字段的验证问题,因此效果良好

不,它不这样做。它只将
process
属性中指定的输入字段发送到服务器,而不是当前表单的所有输入字段。正是
process
属性告诉需要处理(转换、验证和更新)哪些输入。
partialSubmit=“true”
仅减少网络带宽和请求参数解析开销。另请参阅


页面按预期运行,但现在我正试图调整实现,使其更“干净”。我的问题与我用于表单所使用的支持bean的JSF范围有关。使用会话范围,一切都很好,但在使用请求范围时不是这样

会话作用域确实是表单的错误作用域。您需要请求作用域或视图作用域。如果表单的某个状态需要在同一表单的后续提交中记住,则您需要视图作用域。另请参阅


java.lang.IllegalStateException:在提交响应后无法创建会话

这是Mojarra中的一个bug,已在2.1.8中修复。如果无法升级,请参阅一些解决方法


因此,我的理解正确吗?任何使用中间提交的设计模式(通过partialSubmit=“true”命令按钮(默认情况下启用ajax行为)是否至少需要使用会话范围的支持bean?理想情况下,实现请求与导航级别请求的机制将允许在1个请求的上下文中完成这些中间提交

如上所述,您需要查看范围


或者我需要做一些额外的研究吗?(买一本JSF2.x的书,而不是用我的1.2版本?)


当然。不仅视图范围自JSF2以来是新的,而且许多其他事情都是以不同的方式完成的(阅读:更优雅)与JSF1相比,在JSF2中。您可以在底部找到指向sane JSF2资源的多个链接。

非常感谢您的帮助。很抱歉,我应该更具体地说明partiaSubmit注释-实际上,我使用process属性将提交/验证限制为仅限于nameInfo面板中的那些组件。好消息是我可以升级到2.1.8-如果不能的话,我也会查看你提供的链接。Primefaces做得很好-我很感激它可用。不客气。注意:我不是Primefaces开发人员,我只是Primefaces用户。OmniFaces是我的。我错了-我看到你在很多主题上“无处不在”。你提供的链接是宝贵的资源-我应该首先使用它们。感谢反馈。我希望您不介意快速跟进。使用会话bean的一个好处是将数据从一个视图传输到另一个视图(第二个facelet页面向用户显示保存到db的内容).从您的部分中,我了解到我可以使用,构造将数据从视图1传递到视图2。您的示例使用链接传递请求参数,但我假设这也适用于commandButton。如果是这样,请在保持数据传递内聚性的同时实现良好的解耦。祝我好运。