在Primefaces JSF2.x中使用请求作用域的托管bean



JSF + Primefaces新手。(使用JSF 2.1, Primefaces 3.4.2)

我有一个表单,它有一个内部面板组,使用一个Primefaces命令按钮来获取数据来填充各种表单组件。partialSubmit解决了尚未填充的字段的验证问题,因此工作得很好。页面功能如预期,但现在我正试图调整实现是"更干净"。

我的问题与JSF作用域有关,我正在为表单使用的支持bean使用JSF作用域。使用会话作用域时一切正常,但使用请求作用域时就不一样了。我的理解是,"最终"提交(通过另一个p:commandButton组件)和这个获取按钮都调用提交,以便对任何一个响应都构成请求生命周期的完成。如果我是正确的,它解释了为什么我得到(使用请求范围)如下:
java.lang.IllegalStateException:在提交响应后不能创建会话

使用取回按钮时。

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

那么,我的理解是否正确,即任何使用中间提交的设计模式(通过partialSubmit="true" commandButton(默认情况下启用ajax行为)将需要使用至少会话范围的支持bean ?理想情况下,实现请求与导航级请求之间的机制将允许在一个请求的上下文中完成这些中间提交。还是我需要做一些额外的调查?(获得JSF 2。而不是用我的1.2本?)MTIA的任何反馈。

my fetch component:

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

my final submission:

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

partialSubmit绕过了尚未填充的字段的验证问题,因此工作得很好。

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


页面功能如预期,但现在我正试图调整实现是"更干净"。我的问题与我为表单所使用的支持bean所使用的JSF作用域有关。使用会话作用域,一切正常,但使用请求作用域时就不一样了。

session作用域确实是表单的错误作用域。您需要请求或视图作用域。如果表单的某个状态需要在同一表单的后续提交中被记住,那么就需要使用视图作用域。参见如何选择正确的bean作用域?


. lang。IllegalStateException:响应提交后不能创建会话

这是Mojarra的一个bug,在2.1.8中已经修复了。参见添加导致java.lang.IllegalStateException:如果您无法升级,则在响应已提交后无法创建会话。


那么,我的理解是否正确,即任何使用中间提交的设计模式(通过partialSubmit="true" commandButton(默认情况下启用ajax行为)将需要使用至少会话范围的支持bean ?理想情况下,实现请求与导航级请求之间的机制将允许在一个请求的上下文中完成这些中间提交。

如前所述,您需要查看作用域。


还是我需要做一些额外的研究?(获得JSF 2。X的书,而不是用我的1.2版?)

肯定。自JSF2以来,不仅视图作用域是新的,而且与JSF1相比,JSF2中的许多其他事情都做得不同(阅读:更优雅)。您可以在JSF wiki页面的底部找到几个指向相同JSF2资源的链接。

相关内容

  • 没有找到相关文章

最新更新