我们在项目中使用JSF 2.0 . 除了Mojara,我们使用Primefaces 3.3 forsome组件 . 我们的项目中有一个要求,我们必须进行Javascript验证(作为客户端验证的一部分),然后才会发生表单提交 . 无论如何,JSF完成的验证都会发生(在服务器端) . 但Javascript验证也应该存在 .

这就是我问过this问题但没有得到任何评论的原因 .

因此,我正在实施JavaScript验证,这使我了解到我面临的实际问题 . 我有JS函数来执行基本验证,如“必需”字段,长度检查等,并在适当的时候调用它们(如onblur) . 但是,如果用户只是将所有字段留空或者根本不进入某些字段(因此不会触发像onblur这样的事件)并单击提交按钮,则这些字段将被错过JS验证 . 那么在完成所有JS验证后,我如何有条件地提交表单?请注意,我们必须使用f:ajax进行表单提交 .

我尝试了表单的onsubmit函数 . 它适用于FF但不适用于IE9 . 我尝试了命令按钮的onclick功能 . 它调用js但也提交表单 .

如果有帮助,很少有代码

我正在使用的JavaScript函数

var validationErrorFound = false;


     function validateRequired(element,form){

if(null == element.value || "" == element.value){
    var existingClass = element.getAttribute("class");
    var newClass = existingClass + " inputError";
    element.setAttribute("class", newClass); 

    var label = document.getElementById(element.getAttribute("id") + "Lbl");
    var labelArray = new Array();
    var temp = label.innerText;
    labelArray = temp.split(":");
    element.setAttribute("title", labelArray[0] + " is Required");
    validationErrorFound = true;
}else{
    element.className = element.className.replace( /(?:^|\s)inputError(?!\S)/ , '' );
    element.setAttribute("title", null);
    element.removeAttribute("title");
    validationErrorFound = false;
}   
    }



     function validateAllRequired(form){
var all = document.getElementsByTagName("input"); 
var max=all.length; 
for (var i=0; i < max; i++) {       
     if(null != all[i].onblur ){
        validateRequired(all[i],form);      
     }

}
return validationErrorFound;

     }

JSF页面

<h:form id="addUserDetailsForm">   
<h:messages/>           



        <h:panelGrid columns="2">
            <p:outputLabel id="userNameLbl" for="userName" value="Username:" />
            <p:inputText id="userName" required="true" onblur="validateRequired(this,this.form);"
                value="#{userList.addUser.userName}">
                <f:param name="req" value="true"/>
            </p:inputText>  
            <p:outputPanel value="" />

            <p:outputLabel id="firstNameLbl" for="firstName" value="First Name:" />
            <p:inputText id="firstName" required="true" onblur="validateRequired(this,this.form);"
                value="#{userList.addUser.firstName}"/>

            <p:outputLabel id="lastNameLbl" for="lastName" value="Last Name:" />
            <p:inputText id="lastName" required="true" onblur="validateRequired(this,this.form);"
                value="#{userList.addUser.lastName}"/>


            <h:commandButton styleClass="button" value="Add" onclick="validateAllRequired(this.form);"                                      
                    action="#{userList.dummyAdd}" >
                 <f:ajax execute="@form" render=":mainArea :propertiesArea" update=":mainArea :propertiesArea"/>                                        
            </h:commandButton>  

        </h:panelGrid>

有什么办法可以做到吗?

谢谢