2012-03-02 3 views
0

저는 (아직 JSF를 배우면서) 첫 번째 JSF 프로젝트에서 GlassFish를 사용하고 있었고 모든 것이 잘되었습니다. 하지만 나중에 Tomcat (GlassFish는 문제를 일으키고 Tomcat 호스팅은 더 저렴하게 제공됨)으로 전환했습니다. 이제는 해결할 수없는 문제가 있습니다. f : validate를 사용한 양식 유효성 검사가 중단되었습니다.f : validateRequired가 Tomcat에서 작동하지 않습니다.

이미 가장 언급 한 솔루션 검증-api.jar을 및 libs와에 최대 절전 모드 - validator.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는을 추가하고 제출 중 후

오류 메시지 (그리고 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은 무엇입니까? 'web.xml '에있는 JSF 특정 구성 매개 변수는 무엇입니까? – BalusC

답변

0

음, 친구의 도움으로 해결할 수 있습니다. 이유는 모르겠지만 입력이 비어 있으면 모든 f : 유효성 검사 태그가 무시됩니다 (예 : 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로 설정됩니다.

관련 문제