我有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>
下面是对话框:
<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>
当newsBean.delete被触发时,newsBean就不再存在了,所以我得到了很多丑陋的验证异常。我还有其他类似的ViewScoped beans页面,它在那里工作得很棒。帮助?
发布于 2012-05-06 01:53:18
请求作用域bean的生命周期恰好是一个HTTP请求/响应。因此,使用表单检索整个视图已经是一个HTTP请求/响应。请求作用域的bean在响应结束时被回收。当您在视图上触发一个ajax请求时,实际上是在发送一个新的HTTP请求。这将创建一个新的请求作用域bean,该bean在HTTP响应结束时被丢弃。因此,同一视图上的每个ajax请求都有自己的请求作用域bean实例。
如果您需要维护与视图相关的数据,这不是您想要的。您需要将bean放在视图作用域中。只要您通过ajax与相同的视图进行交互,并在操作侦听器方法中返回null
或void
,bean就会一直存在。请注意,当您返回一个String
时,即使是空的,视图也会被重新创建,因此视图作用域的bean将被丢弃。
另请参阅:
https://stackoverflow.com/questions/10463231
复制相似问题