【问题标题】:JSF view is not updated after delete with ajax command button when using two controller classes使用两个控制器类时,使用 ajax 命令按钮删除后 JSF 视图未更新
【发布时间】:2016-08-30 17:27:21
【问题描述】:

当使用两个 Java 类时,更新模型和刷新包含项目列表的视图的最佳方法是什么,一个具有视图逻辑来显示列表,另一个具有删除逻辑(目标是保持类精简),之后通过单击其行上的 PrimeFaces commandButton 删除列表中的项目?

<ui:repeat var="row" value="#{hroc.siblingRows}">
    <ui:repeat var="sibling" value="#{row}">
        <p:commandButton update="@all" action="#{oCDelete.delete(sibling)}"/>   
  ...

删除工作正常,但要让我看到更新的视图,我必须在浏览器上点击刷新。

我现在意识到附加到视图 bean 的模型显然没有被重新加载,所以 update="@all"(或任何其他特定的 id)在这里不会做任何事情。

我是否应该将我的 OCDelete 类注入到视图支持 bean 中,然后在该类中使用 hroc.delete(sibling) 方法来委托实际删除,然后更新我的模型?

或者我是否在OCDelete.delete 中有重定向回facelet?

我正在使用视图参数o:viewParam&lt;f:event type="preRenderView" listener="#{hroc.init}" /&gt;,因此需要考虑这一点。

【问题讨论】:

  • 我记得 @all 也有类似的问题。您可以尝试使用相关组件的特定 ID 进行更新吗?

标签: ajax jsf jakarta-ee


【解决方案1】:

如果您使用的是 primefaces v5.3.5+,那么您可以使用 p:repeat 代替 ui:repeat

<p:repeat id="sibling" var="row" value="#{hroc.siblingRows}">
   <p:repeat var="sibling" value="#{row}">
   <p:commandButton update="sibling" action="#{oCDelete.delete(sibling)}"/>

否则,将ui:repeats 放入容器中(比如p:panel),给它一个ID,然后使用该ID 进行更新。

【讨论】:

  • 重复与我的问题无关,但感谢您指出 PrimeFaces 标签。我认为它更健壮
猜你喜欢
  • 2016-09-19
  • 2020-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多