Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 2 通过h:commandButton条件提交_Jsf 2_Primefaces - Fatal编程技术网

Jsf 2 通过h:commandButton条件提交

Jsf 2 通过h:commandButton条件提交,jsf-2,primefaces,Jsf 2,Primefaces,我们在项目中使用JSF2.0。除了Mojara之外,我们还在一些组件上使用Primefaces 3.3。 我们在项目中有一个要求,我们必须进行Javascript验证(作为客户端验证的一部分),然后只提交表单。JSF所做的验证无论如何都会发生(在服务器端)。但是Javascript有效性也应该存在 这就是我提出这个问题但没有得到任何评论的原因 因此,我正在实现JavaScript验证,这就引出了我所面临的实际问题。 我有JS函数来做基本的验证,比如“必填”字段、长度检查等,并在适当的时间调用它们

我们在项目中使用JSF2.0。除了Mojara之外,我们还在一些组件上使用Primefaces 3.3。 我们在项目中有一个要求,我们必须进行Javascript验证(作为客户端验证的一部分),然后只提交表单。JSF所做的验证无论如何都会发生(在服务器端)。但是Javascript有效性也应该存在

这就是我提出这个问题但没有得到任何评论的原因

因此,我正在实现JavaScript验证,这就引出了我所面临的实际问题。 我有JS函数来做基本的验证,比如“必填”字段、长度检查等,并在适当的时间调用它们(比如onblur)。但是,如果用户只是将所有字段留空或根本不进入某些字段(因此不会触发onblur之类的事件)并单击submit按钮,那么JS验证将错过这些字段。 那么,在所有JS验证完成后,我如何有条件地提交表单呢? 注意,我们必须使用f:ajax进行表单提交

我尝试了表单的onsubmit函数。它在FF上工作,但在IE9上不工作。 我尝试了commandbutton的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;

     }
var validationErrorFound=false;
所需的函数验证(元素、表单){
if(null==element.value | |“”==element.value){
var existingClass=element.getAttribute(“类”);
var newClass=existingClass+“inputError”;
setAttribute(“类”,newClass);
var label=document.getElementById(element.getAttribute(“id”)+“Lbl”);
var labelArray=新数组();
var temp=label.innerText;
labelArray=温度拆分(“:”);
element.setAttribute(“title”,需要labelArray[0]+”);
validationErrorFound=true;
}否则{
element.className=element.className.replace(/(?:^\s)输入程序(?!\s)/,“”);
setAttribute(“title”,null);
元素。删除属性(“标题”);
validationErrorFound=false;
}   
}
函数validateAllRequired(表单){
var all=document.getElementsByTagName(“输入”);
var max=所有长度;
对于(var i=0;i
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>

有什么办法可以做到这一点吗


谢谢

问题不清楚。为什么当primefaces为强制和输入长度验证提供客户端验证时使用javascript。@rags你是说如果我们有一个标记为必需的输入字段,并且我们通过p:commandButton提交它,不会有任何服务器调用,验证只在客户端进行?primefaces没有客户端验证。servel调用将发生。这个相关问题的可能重复可能也很有用:基本上,如果函数validateAllRequired返回false,您必须从onclick返回false。@Damian谢谢。你是对的。