我们在项目中使用 JSF 2.0。除了 Mojara,我们还在使用 Primefaces 3.3 for some components。我们的项目中有一个要求,我们必须进行 Javascript 验证(作为客户端验证的一部分),然后只提交表单。JSF 完成的验证无论如何都会发生(在服务器端)。但是Javascript验证也应该在那里。
这就是我提出这个问题但没有得到任何评论的原因。
因此,我正在实施 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>
有什么办法可以做到这一点?
谢谢