7

首先,为了不产生误解,虽然这和PrimeFaces:conditional update on validation是同一个问题,但我又问了一遍,因为这个问题的答案对我来说是不可接受的,因为虽然它可能已经给出了原来的答案发布他们所要求的解决方法,它并不能真正回答问题,而且这种解决方法对我不起作用。

所以,这是我的问题:如何根据提交的结果有条件地更新 primefaces 组件?

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

为什么我总是不能更新?如果逻辑不成功,它将被更新为单击提交按钮之前的状态。因为我做不到。这是验证码组件。如果您通过 ajax 更新它,它就会消失,故事结束。Primefaces 开了一张票,他们关闭了它,因为不会修复,因为 Flash 组件不应该用 ajax 更新。

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

对不起,如果这是一个 n00b 问题。我对 Primefaces 和 JSF 真的很陌生。

4

3 回答 3

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

帮助有条件的更新。

对于recaptcha尝试

RequestContext.getCurrentInstance().execute("Recaptcha.destroy()");
于 2012-12-17T17:08:16.920 回答
12

您可以结合使用 JavaScript 和 RemoteCommand:

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

<p:remoteCommand name="updateMyImportantUI" process="@this" update=":myImportantID" />     
于 2014-03-14T13:56:14.287 回答
2

您可以在支持 bean 上使用一个变量,并在 xhtml 部分使用它。
像这样:

update="#{backingMB.updateString}"

所以,在条件之后你可以把值放在 上updateString,但是当你在 上定义它时backingMB,你需要把它写成:

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

这样你就不会得到NullPointerException

于 2012-12-17T17:12:19.453 回答