【发布时间】:2012-05-14 20:21:26
【问题描述】:
我有 RequestScoped bean,因为我将用户从带有记录的 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 bean,它的工作原理就像一个魅力。帮忙?
【问题讨论】:
-
newsBean 将存在,但它将是一个新实例。请显示错误日志和 newsBean.delete 的实现。
-
这就是重点!如何维护旧实例而不是获取新实例?错误日志此时将无用,它只是由于 null 新闻属性而导致的一堆验证异常。 delete 方法只是调用 entityManager.remove(entityManager.merge(news)),当然不是直接调用。
-
将 bean 更改为 ViewScope
-
不是一个选项,因为我需要在编辑页面上使用它从带有 dataTable 的页面重定向。
-
刚才我意识到我的编辑也不起作用:D。我认为在这种情况下我必须坚持使用 SessionScoped。或者也许有更好的解决方案?
标签: jsf jsf-2 primefaces