PrimeFaces的p:wizard验证无效

| 我有一个带有某些标签的
p:wizard
。在第一个标签中,用户选择一个值(t
:selectOneRadio
-我使用的是“战斧”)。这是必需的值。 如果用户未选择值,则不会转到下一个选项卡,但不会显示验证错误。嗯 如果用户选择了一个值,则转到下一个选项卡,返回到第一个选项卡并选择一个不同的值,这将表现为这次没有选择任何值。 (也没有验证错误,但无法调用第二个选项卡)。 更糟糕的是:用户在第一个选项卡中选择一个值,转到第二个选项卡,然后尝试从那里调用操作。就像在第一个选项卡中没有选择任何值一样。 有什么解释吗? 更新 PrimeFaces论坛中建议的解决方案对我有用。 (将process = \“ @ this \”添加到命令按钮。)     
已邀请:
        您可能要考虑的另一件事.. 如果在选项卡之间的必填字段中遇到问题,则可以通过在向导组件中实现流事件来手动执行各步骤之间的验证。
    public String onFlowProcess(FlowEvent event) {  
    //First perform check to see if the user is attempting to remove the last visitor
    if (\"confirm\".equals(event.getNewStep()) && (visitors == null || visitors.isEmpty())) {
        log.debug(\"Validation failed for empty visitors\");
        FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, \"Visit must have at least one visitor.\", null);
        FacesContext.getCurrentInstance().addMessage(null, msg);
        return event.getOldStep();
    }

    return event.getNewStep();  
}
还有.xhtml文件,我声明了flowListener事件。尝试此操作,看看验证消息是否消失。
<p:wizard showNavBar=\"true\" widgetVar=\"scheduler\" flowListener=\"#{scheduleVisit.onFlowProcess}\" showStepStatus=\"true\">
    
        更新 PrimeFaces论坛中建议的解决方案对我有用。 (在
commandButton
中加上
process=\"@this\"
。)不过,不知道为什么!     
        听起来可能是几个可能的问题之一。您可能会收到验证错误,但是可能未正确声明消息组件,或者未更新消息组件。如果是这种情况,它们可能是验证错误,您只是在页面上看不到该错误。 从Primefaces Guide 2.2中的向导组件:   AJAX和部分验证-   在步骤之间切换是基于ajax的,这意味着每个步骤都将使用ajax动态加载。   部分验证也是内置的,通过这种方式,当您单击下一步时,仅验证当前步骤,   如果当前步骤有效,则下一个选项卡的内容将加载ajax。验证未执行   当流量返回时。 另一个问题可能是您的属性未在托管Bean中正确设置,这导致了验证问题。这似乎更有可能。 我有一个麻烦,为什么对于selectOneRadio为什么除了“必需”之外还需要验证?您的选择数量有限,必须选择一个,因此不应出现错误的值或无效的值。     
        您只需要在单选按钮上放置要求为true的属性即可。 例如:
<p:selectOneRadio required=\"true\" requiredMessage=\"you must put it\">
    <f:selectItem itemLabel=\"Días Laborales\" itemValue=\"diasLab\" />
    <f:selectItem itemLabel=\"Días Ticados\" itemValue=\"diasTic\" />
</p:selectOneRadio>
    
        PrimeFaces的p:向导验证问题 步骤:1 customerInformation.xhtml
<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" 
\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">
<html xmlns=\"http://www.w3.org/1999/xhtml\"
    xmlns:h=\"http://java.sun.com/jsf/html\"
    xmlns:p=\"http://primefaces.org/ui\">


 <p:wizard flowListener=\"#{customerForm.onFlowProcess}\">  

       <p:tab id=\"information\" title=\"Information\">  
     <p:panel header=\"Customer Information\"> 

        <h:outputLabel value=\"First Name\" for=\"fName\"/>
            <h:inputText id=\"fname\" value=\"#{customer.fname}\"/>                                                                                                                                             

            <h:outputLabel value=\"Last Name\" for=\"lName\"/>
            <h:inputText id=\"lname\" value=\"#{customer.lname}\"/>                                                             

         </panel>
       </p:tab>

         <p:tab id=\"details\" title=\"Details\">  
       <p:panel header=\"Customer Details\">  

              <h:outputLabel value=\"Address Line 1\" for=\"addressOne\"/>
            <h:inputText id=\"addressOne\" value=\"#{customer.addressOne}\"/>                                                                                                                                               

            <h:outputLabel value=\"Address Line 2\" for=\"addressTwo\"/>
            <h:inputText id=\"addressTwo\" value=\"#{customer.addressTwo}\"/>   

           </panel>
       </p:tab>
  </p:wizard>
</html>
步骤:2创建bean类CustomerForm.java
public class CustomerForm implements Serializable {

    private static final long serialVersionUID = 1L;

    private String fName;
    private String lName;
    private String addressOne;
    private String addressTwo;

    private static Logger logger = Logger.getLogger(CustomerForm.class.getName());                                         

    /**
     * Call this method in p:wizard tag
     * 
     */  
    public String onFlowProcess(FlowEvent event) {  
    logger.info(\"Current wizard step:\" + event.getOldStep());  
    logger.info(\"Next step:\" + event.getNewStep());  
        return event.getNewStep();  
    }

    /**
     * @return the fName
     */
    public String getfName() {
        return fName;
    }
    /**
     * @param fName the fName to set
     */
    public void setfName(String fName) {
        this.fName = fName;
    }
    /**
     * @return the lName
     */
    public String getlName() {
        return lName;
    }
    /**
     * @param lName the lName to set
     */
    public void setlName(String lName) {
        this.lName = lName;
    }
    /**
     * @return the addressOne
     */
    public String getAddressOne() {
        return addressOne;
    }
    /**
     * @param addressOne the addressOne to set
     */
    public void setAddressOne(String addressOne) {
        this.addressOne = addressOne;
    }
    /**
     * @return the addressTwo
     */
    public String getAddressTwo() {
        return addressTwo;
    }
    /**
     * @param addressTwo the addressTwo to set
     */
    public void setAddressTwo(String addressTwo) {
        this.addressTwo = addressTwo;
    }

}
注意:不要在xhtml文件中放置required =“ true”     

要回复问题请先登录注册