7

在我的 JSF 应用程序中,我试图在我的命令按钮更新属性中添加一些条件,以便在验证失败/成功时我可以控制组件进行更新。

参考PrimeFaces:我尝试使用的验证条件更新

<p:commandLink process="@form" listener="#{foo}" 
  update="somethingElse" oncomplete="if (!args.validationFailed) $("#link").click();">
<p:commandLink style="display:none" id="link"
  update="something">

但是我不知道为什么这种方法对我不起作用..该特定组件的单击事件对我不起作用..我尝试执行相同问题的已接受答案,但我不明白如何解决目的...

我的目的是根据验证成功或失败的结果有条件地更新......支持我有 3 个组件 XY Z.. 我正在尝试做这样的事情..

<p:commandLink process="@form" listener="#{foo}" 
      update="if(Validation fail)updateSomething[e.g X and Y] **else** update somethingelse[e.g X  Y and Z]">

更准确地说,如果验证失败,那么我只想在验证成功时更新 X 和 Y 组件,而不是更新 XY 和 Z 组件。

请帮帮我..提前谢谢。

4

2 回答 2

13

第一个问题是您拥有的 EL 语法无效。您在 JavaScript 代码中使用"而不是过早地关闭了属性值。'要么转义嵌套引号,\"要么直接使用'

<p:commandLink process="@form" listener="#{foo}" update="somethingElse" 
    oncomplete="if (!args.validationFailed) $('#link').click();">

第二个可能的问题是客户端ID<p:commandLink id="link">根本不是"link"。默认情况下,它带有父<h:form>组件的 ID。客户端 ID 是 JSF 生成的 HTML 元素 ID。在网络浏览器中打开页面,右键单击并查看源代码以自己查看。它看起来像id="formId:link". 您需要在 jQuery 选择器中准确使用该 ID。

<p:commandLink process="@form" listener="#{foo}" update="somethingElse" 
    oncomplete="if (!args.validationFailed) $('#formId\\:link').click();">

也可以看看:


另一种方法是改为在后面的方法中执行具体工作listener="#{foo}"

if (!facesContext.isValidationFailed()) {
    RequestContext.getCurrentInstance().update("somethingElse");
}
于 2012-06-15T12:41:53.660 回答
0

我尝试了标记的答案,但它没有解决我的问题,因为 args 不包含名为“validationFailed”的参数,但是我找到了从控制器添加此参数的方法。

 import org.primefaces.context.RequestContext;

 RequestContext requestContext = RequestContext.getCurrentInstance();
 requestContext.addCallbackParam("validationError", true);
 JSFUtils.displayErrorMessage("My message is here!");

& 在 xhtml 中我添加了以下命令链接

 <p:commandLink ajax="true" action="#{myController.myMethod}"
 oncomplete="if(args.validationError) alert('Error!');"/>
于 2016-04-13T17:42:19.600 回答