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

DHR*_*SAL 6 validation jsf primefaces java-ee-6 jsf-2

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

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

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

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

我的目的是根据验证成功或失败的结果有条件地更新...支​​持我有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]">
Run Code Online (Sandbox Code Playgroud)

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

请帮助我..提前致谢.

Bal*_*usC 13

第一个问题是你在那里的EL语法是无效的.您使用"而不是'在JavaScript代码中过早关闭属性值.可以使用\"或仅使用转义嵌套引号'.

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

第二个可能的问题是客户端ID <p:commandLink id="link">根本不"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();">
Run Code Online (Sandbox Code Playgroud)

也可以看看:


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

if (!facesContext.isValidationFailed()) {
    RequestContext.getCurrentInstance().update("somethingElse");
}
Run Code Online (Sandbox Code Playgroud)