Primefaces / jsf中的条件更新

时间:2012-12-17 16:59:53

标签: ajax jsf primefaces

首先,所以没有误解,虽然这与PrimeFaces: conditional update on validation同样的问题我再次提出这个问题,因为对这个问题的回答是我不能接受的 ,因为虽然它可能给原始海报提供了他们所要求的解决方法,但它并没有真正回答这个问题,而且这种解决方法对我不起作用。

所以,这是我的问题:如何根据子指令的结果有条件地更新一个primefaces组件?

我有一个组件,在任何情况下都不能更新,除非验证成功并且后端代码已成功执行。 (即如果验证成功但后端存在SQL异常,则组件仍不应更新)。

为什么我不能一直更新它?如果逻辑没有成功,它将被更新为单击提交按钮之前的相同内容。 因为我不能。这是验证码组件。如果你通过ajax更新它,它就会消失,故事结束。在Primefaces打开了一张票,他们将其关闭,因为无法修复,因为闪存组件不应该用ajax更新。

所以当我提交表单时,除非逻辑成功,否则我需要单独留下验证码。如果逻辑成功,我需要确保验证码在屏幕外消失。什么是最简单,最干净的方法呢?

如果这是一个n00b问题,请原谅。我是Primefaces和JSF的新手。

3 个答案:

答案 0 :(得分:10)

RequestContext.getCurrentInstance().update("clientId")

帮助进行条件更新。

重新尝试

RequestContext.getCurrentInstance().execute("Recaptcha.destroy()");

答案 1 :(得分:9)

您可以结合使用JavaScript和RemoteCommand:

<p:commandLink action="#{bean.doIt()}" process="@form" update="@none" oncomplete="if(!args.validationFailed){updateMyImportantUI();}" />

<p:remoteCommand name="updateMyImportantUI" process="@this" update=":myImportantID" />     

答案 2 :(得分:1)

您可以在辅助bean中使用变量并在xhtml部分使用它 像这样:

update="#{backingMB.updateString}"

因此,在条件之后您可以设置updateString的值,但是当您在backingMB上定义它时,您需要将其设置为:

String updateString=""; // this will be id of the component to be updated  

这样你就不会得到NullPointerException