2013-03-11 77 views
6

我有一个模板,当组件验证失败时它可以将CSS错误类添加到div,并且它在浏览器上呈现相当不错的效果。JSF:验证失败javascript回调

现在,我并不需要一个CSS类添加到组件this不会帮我),而是我需要改变,围绕它的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> 

如果输入的文本是空的,我需要一个包装的“对照组”有一个额外的类股利。我可以把它变成<h:panelGroup>,所以它是一个JSF组件,但我仍然不知道如何去做。 Javascript似乎更容易,因为我可以做一个:

jQuery("#ID_OF_DIV").addClass("error_class") 
+0

是的。你可以使用'.addClass'到现有的div。你有什么问题? – SRy 2013-03-11 22:57:56

+0

我的问题是,当组件发生故障时,我没有javascript回调。而不是“onclick”,“onmouseover”等,我需要像“onvalidationfailed” – arg20 2013-03-11 23:06:33

回答

20

只是让JSF/EL有条件打印基于FacesContext#isValidationFailed()类。

<div class="control-group #{facesContext.validationFailed ? 'error_class' : ''}"> 

您只需确保此元素被ajax更新/渲染所覆盖。

另一种方法是挂接任意PrimeFaces ajax组件的oncomplete事件。在范围内有一个args对象,该对象又具有validationFailed属性。例如。 <p:commandButton oncomplete>或甚至<p:ajaxStatus oncomplete>

<p:ajaxStatus ... oncomplete="if (args &amp;&amp; args.validationFailed) $('#ID_OF_DIV').addClass('error_class')"> 
1

如果你想在客户端做所有事情。

 <h:outputText class="samplecls" rendered="#{facesContext.validationFailed}" 
       value="Please enter all the required fields"> 
    </h:outputText> 


    <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> 

使用Javascript/jQuery的

This class will exist in DOM only validation fails by rendered="#{facesContext.validationFailed}" 


    $(window).load(function(){ 
     if($('.samplecls').length>0){ 
      $("#ID_OF_DIV").addClass("error_class");  
     } 
});