【问题标题】:Update JSF components in sequence from bean从 bean 依次更新 JSF 组件
【发布时间】:2017-06-29 18:55:43
【问题描述】:

我需要从我的支持 bean 执行三个动作,但第二个和第三个动作似乎在第一个完成执行之前被触发。

结果是调用了第二个/第三个动作但没有执行。

我如何设法执行第一个动作,等到如果完成然后开始第二个/第三个动作?

动作是

  1. 关闭模式对话框窗口。执行渲染最多需要一秒钟。

RequestContext.getCurrentInstance().execute("PF('dlgConfirmApplicationDelete').hide();");

  1. 更新面板h:panelGroup组件

RequestContext.getCurrentInstance().update("j_idt3:panelGroupHolder");

  1. 更新第二个面板h:panelGroup 组件

RequestContext.getCurrentInstance().update("j_idt3:center_westBody");

【问题讨论】:

  • 为什么不使用一个单独的方法和布尔访问或类似的东西???
  • 你在等待用户OK执行第二个动作吗?!?
  • 不等待用户。用户单击对话框窗口上的按钮后,我需要在数据库中执行一项操作,根据结果,我需要关闭窗口,并在使用更新的信息更新其他两个 panelGroups 之后立即关闭。
  • 你试过了吗???

标签: jsf primefaces


【解决方案1】:

我需要在数据库中执行一项操作,具体取决于 结果我需要关闭窗口并在更新其他两个之后立即 具有更新信息的面板组

您可以在不从 java 代码中调用操作的情况下执行此操作。

在不知道您的确切布局的情况下,您要求的任务通常如下所示:

<p:commandLink 
   process="@form" 
   actionListener="#{bean1.updateDatabase}"   
   update="j_idt3:panelGroupHolde;j_idt3:center_westBody" 
   oncomplete="if (args.updateSuccessfull) PF('dlgConfirmApplicationDelete').hide();">

bean1.updateDatabase 方法中,根据查询的实际结果指定 args.updateSuccessfull

Boolean updateSuccessfull = false;
RequestContext.getCurrentInstance().addCallbackParam("updateSuccessfull", updateSuccessfull);

在您提到的示例中,顺序并不重要,因为每个操作都有其预定的结果,并且专用于生命周期中的某个阶段(更新总是在完成之前):

  • 如果更新查询失败,数据不会更改,因此update= 没有影响,并且由于回调参数,对话框保持可见。
  • 如果更新查询有效,数据确实会发生变化,两个 ui 元素都会更新(顺序必须无关紧要),并且由于回调参数而隐藏了对话框。

如果不是这种情况,那么您在RenderResponse-Phase 中有代码,应该在InvokeApplication-Phase(或更早)中执行。

导致后者的一个常见错误是从 xhtml 调用“包含大量代码的方法”(而其他列表(“第二次更新”)也依赖于该值),例如

&lt;ui:repeat values="#{bean1.queryDatabaseForXY()}" ...&gt;

显然现在第二次更新需要在第一次更新之后进行,因为它还需要来自bean1.queryDatabaseForXY() 的一些数据。

您应该在适当的阶段执行数据加载和/或计算,并在生成响应时简单地引用返回已知集合的getter

<ui:repeat values="#{bean1.getUsers()}" ...>

更准确地说

    <ui:repeat values="#{bean1.users}" ...>

(实际加载可能是@PostConstruct&lt;f:viewAction&gt; 或只是视图或会话范围 bean 中已经存在的列表)

【讨论】:

  • 你好狗鼻子!非常感谢分享这个解决方案。 Primefaces真的很摇滚!!使用如此强大的功能使编码变得更加简单。
猜你喜欢
  • 2014-07-17
  • 1970-01-01
  • 1970-01-01
  • 2014-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-07
  • 2016-01-31
相关资源
最近更新 更多