gua*_*ito 2 jsf primefaces jsf-2
我有RequestScoped bean,因为我将用户从dataTable重定向到记录到编辑页面.在这个dataTable我有删除按钮:
<p:column>
<p:commandButton update=":deleteNewsDialog" oncomplete="deleteNewsDlg.show()" icon="ui-icon-closethick">
<f:setPropertyActionListener value="#{news}" target="#{newsBean.news}" />
</p:commandButton>
</p:column>
Run Code Online (Sandbox Code Playgroud)
这是对话框:
<p:confirmDialog id="deleteNewsDialog" message="Czy na pewno chcesz usun?? wiadomo?? o tytule "#{newsBean.news.title}"?"
header="Usuwanie wiadomo?ci" severity="alert"
widgetVar="deleteNewsDlg" appendToBody="true">
<h:form>
<p:commandButton value="Usu?" actionListener="#{newsBean.delete}" update=":newsesTableForm:newsesTable, :newsesTableForm:newsGrowl"/>
<p:commandButton value="Anuluj" oncomplete="deleteNewsDlg.hide();"/>
</h:form>
</p:confirmDialog>
Run Code Online (Sandbox Code Playgroud)
当触发newsBean.delete时,newsBean不再存在,因此我得到了许多丑陋的验证异常.我有ViewScoped豆这样的其他页面,它就像一个魅力.救命?
请求范围的bean的生命周期恰好是一个HTTP请求/响应.因此,使用表单检索整个视图已经是一个HTTP请求/响应.请求作用域bean在响应结束时被删除.当您在视图上触发ajax请求时,您实际上是在发送新的HTTP请求.这将创建一个新的请求范围bean,它会在HTTP响应结束时被破坏.因此,同一视图上的每个ajax请求都会获得自己的请求范围的bean实例.
如果您需要维护与视图相关的数据,那么这不是您想要的.您需要将bean放在视图范围中.只要您通过ajax和return null
或void
in action listener方法与同一视图交互,bean就会存在.请注意,当您返回a时String
,即使为空,也会重新创建视图,因此将删除视图范围的bean.
归档时间: |
|
查看次数: |
1038 次 |
最近记录: |