JSF:有条件地更新验证成功或失败

时间:2012-06-15 11:37:37

标签: validation jsf jsf-2 primefaces java-ee-6

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

参考PrimeFaces: conditional update on validation我试图使用

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

但是我不知道为什么这种方法对我不起作用..特定组件的点击事件对我不起作用..我试图对同一个问题执行接受的答案,但我无法理解解决目的......

我的目的是根据验证成功或失败的结果有条件地更新...支​​持我有3个组件X Y 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组件,而不是我想更新X Y&amp; Z组件..

请帮帮我.. 提前谢谢。

2 个答案:

答案 0 :(得分:12)

第一个问题是你在那里的EL语法无效。您在JavaScript代码中使用"而不是'来过早关闭属性值。要么使用\"转义嵌套引号,要么只使用'

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

第二个可能的问题是<p:commandLink id="link">的客户端ID根本不是"link"。默认情况下,它前缀为父<h:form>组件的ID。客户端ID是JSF生成的HTML元素ID。在webbrowser中打开页面,右键单击查看源以自行查看。它看起来像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");
}

答案 1 :(得分:0)

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

 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!');"/>