使用两个控制器类

时间:2016-08-30 17:27:22

标签: ajax jsf java-ee

在使用两个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中有重定向回到小面孔吗?

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

1 个答案:

答案 0 :(得分:0)

如果您使用的是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:repeat放入容器(例如p:panel),给它一个id,然后使用该ID进行更新。