JSF:验证失败的javascript回调

arg*_*g20 6 java jsf primefaces

我有一个模板,我可以在组件验证失败时向div添加一个CSS错误类,它会对浏览器产生非常好的效果.

现在,我不需要为组件添加一个css类(对我没有帮助),而是我需要更改它周围的html的css,这对jQuery非常简单,但我可以'似乎找不到验证失败的javascript回调,这可能吗?我也在使用primefaces(如果他们提供这样的功能).

标记:

<div class="control-group ERROR_CLASS_GOES_HERE_IF_VALIDATION_FAILED">
   <label class="control-label">Input value:</label>
   <div class="controls">
      <h:inputText class=" inputbox" type="text" required="true" /> <!--Component that can fail -->
   </div>
</div>
Run Code Online (Sandbox Code Playgroud)

如果输入文本为空,我需要包含"控制组"的div才能有一个额外的类.我可以把它变成一个<h:panelGroup>所以它是一个JSF组件,但我仍然不知道如何做到这一点.Javascript似乎更容易,因为我可以做:

jQuery("#ID_OF_DIV").addClass("error_class") 
Run Code Online (Sandbox Code Playgroud)

Bal*_*usC 20

让JSF/EL有条件地打印基于的类FacesContext#isValidationFailed().

<div class="control-group #{facesContext.validationFailed ? 'error_class' : ''}">
Run Code Online (Sandbox Code Playgroud)

您只需要确保ajax update/render覆盖此元素.

另一种方法是挂钩基于oncomplete任意PrimeFaces ajax的组件.args范围内有一个对象,而这个对象又有一个validationFailed属性.例如<p:commandButton oncomplete>甚至是<p:ajaxStatus oncomplete>.

<p:ajaxStatus ... oncomplete="if (args &amp;&amp; args.validationFailed) $('#ID_OF_DIV').addClass('error_class')">
Run Code Online (Sandbox Code Playgroud)