2012-11-13 35 views
1

我正在嘗試Omnifaces驗證程序,尤其是validateEqual,因此我創建瞭如此的測試頁。Omnifaces ValidateEqual不執行驗證

<p:messages autoUpdate="true" showDetail="false" /> 
<h:form id="registerForm" prependId="false"> 
    <p:panelGrid columns="2" styleClass="register-grid"> 

     <h:outputLabel for="password" value="Password *" /> 
     <p:inputText id="password" value="" label="Password" 
      requiredMessage="Password is required" size="30"> 
      <f:validateRequired /> 
     </p:inputText> 

     <h:outputLabel for="confirmPassword" value="Confirm Password *" 
      requiredMessage="Confirm Password is required" /> 
     <p:inputText id="confirmPassword" value="" label="Confirm Password" requiredMessage="Confirm password is required" 
      size="30"> 
      <f:validateRequired /> 
     </p:inputText> 

     <o:validateEqual components="password confirmPassword" message="Passwords are not equal"/> 

     <f:facet name="footer"> 
      <p:commandButton value="Register" action="/pages/public/login"/> 
      <p:commandButton value="Cancel" immediate="true" action="/pages/public/login"/> 
     </f:facet> 
    </p:panelGrid> 
</h:form> 

不知道,但沒有發生,我從螢火蟲下面看到的錯誤。

<partial-response> 
    <error> 
     <error-name>class javax.faces.component.UpdateModelException</error-name> 
     <error-message>/pages/public/register.xhtml @26,57 value="": Illegal Syntax for Set Operation</error-message> 
    </error> 
    <changes> 
     <extension ln="primefaces" type="args">{"validationFailed":true}</extension> 
    </changes> 
</partial-response> 

可能是什麼原因?

+0

你的'value'屬性對於兩個輸入字段都是空的。這可能會導致錯誤。 –

回答

1
/pages/public/register.xhtml @26,57 value="": Illegal Syntax for Set Operation 

這基本上是說不能在空值表達式上執行「set」操作(setter方法調用)。

要麼完全刪除value屬性(至少從「確認」字段),要麼指定一個有效值表達式,如value="#{bean.password}"(至少對於第一個字段)。所以,基本上:

<p:inputText id="password" value="#{bean.password}" label="Password" 
    requiredMessage="Password is required" size="30" required="true" /> 
<p:inputText id="confirmPassword" label="Confirm Password" 
    requiredMessage="Confirm password is required" size="30" required="true" /> 
<o:validateEqual components="password confirmPassword" 
    message="Passwords are not equal" /> 

這與使用<o:validateEqual>無關。不使用它時,你會遇到完全相同的問題。但是,您可能想要使用OmniFaces FullAjaxExceptionHandler,以便在ajax請求期間獲取有關異常的真實錯誤頁面,而不是完全缺少視覺反饋。