2012-03-02 14 views
0

私は最初のJSFプロジェクト(まだJSFを学んでいます)でGlassFishを使用していましたが、すべてうまくいきました。しかし、後で、私はTomcatに切り替えました(GlassFishはいくつかの問題を引き起こしており、Tomcatのホスティングはより安価に提供されています)。そして今私は解決できない問題があります.f:validateを使ったフォームの検証は動作を停止しました。f:validateRequiredがTomcatで動作しない

は、私はすでに多くの解決策を試してみましたが、ほとんど上記の解決策は、Hibernate-validator.jarをLIBSに検証-api.jarのを追加している - ちょうどフォームがすべてで働いて立ち止まったことを引き起こしていること(上記のエラーを参照してください) 。

今私は本当に何をすべきか分かりません。私はNetBeans 7.1、Tomcat 7.0.22.0を使用しています。どんな助けもありがとうございます。ありがとう!

ああ、興味深いことに、正規表現(電子メール)による検証は、入力が空でない場合のみです。

javax.validation.ValidationException: Unable to find a default provider 
    at javax.validation.Validation$GenericBootstrapImpl.configure(Validation.java:264) 
    at javax.validation.Validation.buildDefaultValidatorFactory(Validation.java:111) 
    at javax.faces.validator.BeanValidator.validate(BeanValidator.java:276) 
    at javax.faces.component.UIInput.validateValue(UIInput.java:1149) 
    at javax.faces.component.UIInput.validate(UIInput.java:967) 
    at javax.faces.component.UIInput.executeValidate(UIInput.java:1233) 
    at javax.faces.component.UIInput.processValidators(UIInput.java:698) 
    at javax.faces.component.UIForm.processValidators(UIForm.java:253) 
    at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214) 
    at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214) 
    at javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:1172) 
    at com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:76) 
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) 
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:409) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:964) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:304) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 
    at java.lang.Thread.run(Thread.java:662) 

形態:

形態をバリデーション-api.jarのとLIBSへ休止-validator.jarを添加しsubmiting後

エラーメッセージを(そして、LIBSなし添加)

<h:form> 
    <table> 
     <tr> 
      <th><label for="registration-email">#{usersTexts.email}:</label></th> 
      <td> 
       <h:inputText value="#{userRegistry.newUser.email}" id="registration-email" validatorMessage="#{msg.invalidEmail}" maxlength="100"> 
        <f:validateRequired /> 
        <f:validateRegex pattern="^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$" /> 
       </h:inputText> 
      </td> 
      <td><p:message for="registration-email" /></td> 
      <td rowspan="4"> 
       <!--p:captcha immediate="true" validatorMessage="#{msg.wrongCaptcha}" requiredMessage="#{formsTexts.captcha} #{msg.isEmpty}" /--> 
      </td> 
     </tr> 
     <tr> 
      <th><label for="registration-name">#{usersTexts.name}:</label></th> 
      <td> 
       <h:inputText value="#{userRegistry.newUser.name}" id="registration-name" validatorMessage="#{formsTexts.field} #{usersTexts.name} #{msg.isEmpty}" maxlength="100"> 
        <f:validateRequired /> 
       </h:inputText> 
      </td> 
      <td><p:message for="registration-name" /></td> 
     </tr> 
     <tr> 
      <th><label for="registration-password1">#{usersTexts.password}:</label></th> 
      <td> 
       <h:inputSecret value="#{userRegistry.newUser.password}" binding="#{password}" id="registration-password1" validatorMessage="#{formsTexts.field} #{usersTexts.password} #{msg.isEmpty}"> 
        <f:validateRequired /> 
       </h:inputSecret> 
      </td> 
      <td><p:message for="registration-password1" /></td> 
     </tr> 
     <tr> 
      <th><label for="registration-password2">#{usersTexts.passwordAgain}:</label></th> 
      <td> 
       <h:inputSecret id="registration-password2" validatorMessage="#{msg.passwordsNotEqual}"> 
        <f:validateLength minimum="#{user.MIN_PASSWORD_LENGTH}" /> 
        <f:validator validatorId="equality" /> 
        <f:attribute name="matchAgainst" value="#{password}" /> 
       </h:inputSecret> 
      </td> 
      <td><p:message for="registration-password2" /></td> 
     </tr> 
     <tr> 
      <td colspan="2" class="submit_row"> 
       <h:commandButton value="#{usersTexts.register}" action="#{userRegistry.register}" /> 
      </td> 
     </tr> 
    </table> 
</h:form> 
+0

Tomcatで使用しているJSF impl/versionはどれですか?どのJSF固有の設定パラメータが 'web.xml'にありますか? – BalusC

答えて

0

まあ、友人の助けを借りて私はそれを解決しました...理由はわかりませんが、入力が空白の場合、すべてのf:validateタグは無視されます - f:validateRequiredを含むので、バリデーションはありませんでしたまったく。

f:validateRequiredタグを削除し、required="true"属性を使用して解決しました。したがって、入力値は空ではありません(required="true"が動作します)。それ以外のf:バリデータはすべて動作します。

+1

この動作はjavax.faces.VALIDATE_EMPTY_FIELDSに関連している可能性があります。詳細はこちらhttp://andyschwartz.wordpress.com/2009/07/31/whats-new-in-jsf-2/ –

0

これは、次の属性を設定する必要があるために起こります。 デフォルトでは、javax.faces.VALIDATE_EMPTY_FIELDSはfalseに設定されています。

関連する問題