论坛首页 Java企业应用论坛

关于struts的validate问题

浏览 8291 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2006-01-10  
学习struts有半年了,一直extends ActionForm写validate,rest方面来检验.郁闷了半年从没有成功使用validation框架。虽然是
基础的东东,但是实验了多少天都没有成功,还是得求 教大家,下面是非常简单的测试文件,还是请各位指点一句半句,感激不尽。:)

struts文件.


<?xml version="1.0" encoding="ISO-8859-1" ?>

<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">
      
<struts-config>
<!-- ============ Data Source =================================== -->

  <!-- ========== Form Bean Definitions =================================== -->
  <form-beans>
    <form-bean name="testForm" type="org.apache.struts.validator.DynaValidatorForm">
      <form-property name="name" type="java.lang.String"/>
     
    </form-bean>
   
  
  </form-beans>


  <!-- ========== Global Forward Definitions ============================== -->
  <global-forwards>
  
  </global-forwards>


  <!-- ========== Action Mapping Definitions ============================== -->
    <action-mappings>
   <action    path="/test"
              type="TestAction"
              name="testForm"
              attribute="testForm"
              scope="request"
              validate="true"
              input="/test.jsp">
             
      <forward name="success" path="/test.jsp"/>
    </action>


   
    </action-mappings>

  <message-resources parameter="test.ApplicationResources"/>
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
    <set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/>
  </plug-in>
</struts-config>

validation文件.

<form-validation>
  <global>
    <constant>
      <constant-name>phone</constant-name>
      <constant-value>^\d{8}\d*$</constant-value>
    </constant>
    <constant>
      <constant-name>zip</constant-name>
      <constant-value>^\d{6}\d*$</constant-value>
    </constant>
    <constant>
      <constant-name>mark</constant-name>
      <constant-value>\d+</constant-value>
    </constant>
    <constant>
      <constant-name>score</constant-name>
      <constant-value>\d+</constant-value>
    </constant>
    <constant>
      <constant-name>email</constant-name>
      <constant-value>\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*</constant-value>
    </constant>
  </global>
  <formset>
    <constant>
      <constant-name>zip</constant-name>
      <constant-value>^\d{6}\d*$</constant-value>
    </constant>
    <form name="testForm">
      <field property="name" depends="required">
        <arg0 key="name"/>
      </field>   
    </form>
   
 
  </formset>
</form-validation>

jsp代码:

.....
<html:form action="/test.do">
<html:errors/>
<html:text property="name"/>
<html:submit/>
</html:form>
.....


提交时的debug: variables中的错误提示:
ValidatorAction: required

java.lang.NoSuchMethodException: org.apache.struts.validator.FieldChecks.validateRequired(java.lang.Object, org.apache.commons.validator.ValidatorAction, org.apache.commons.validator.Field, org.apache.struts.action.ActionErrors, javax.servlet.http.HttpServletRequest)

最终的错误提示:
2006-1-9 22:12:58 org.apache.struts.validator.DynaValidatorForm validate
严重: org.apache.struts.validator.FieldChecks.validateRequired(java.lang.Object, org.apache.commons.validator.ValidatorAction, org.apache.commons.validator.Field, org.apache.struts.action.ActionErrors, javax.servlet.http.HttpServletRequest)
org.apache.commons.validator.ValidatorException: org.apache.struts.validator.FieldChecks.validateRequired(java.lang.Object, org.apache.commons.validator.ValidatorAction, org.apache.commons.validator.Field, org.apache.struts.action.ActionErrors, javax.servlet.http.HttpServletRequest)
at org.apache.commons.validator.ValidatorAction.loadValidationMethod(ValidatorAction.java:587)
at org.apache.commons.validator.ValidatorAction.executeValidationMethod(ValidatorAction.java:517)
at org.apache.commons.validator.Field.validateForRule(Field.java:637)
at org.apache.commons.validator.Field.validate(Field.java:716)
at org.apache.commons.validator.Form.validate(Form.java:198)
at org.apache.commons.validator.Validator.validate(Validator.java:284)
at org.apache.struts.validator.DynaValidatorForm.validate(DynaValidatorForm.java:112)
at org.apache.struts.action.RequestProcessor.processValidate(RequestProcessor.java:921)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:206)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1158)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:415)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:763)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:284)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:204)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:257)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:151)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:564)
at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:245)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:199)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:151)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:564)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:195)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:151)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:164)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:149)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:564)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:156)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:151)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:564)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:972)
at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:206)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:828)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:700)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:584)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
at java.lang.Thread.run(Thread.java:534)


同时我还试过不用在struts_config中配置DynaValidatorForm,而是手写TestForm extends ValidationForm.但是这样提交之后,那个
<form name="testForm">
      <field property="name" depends="required">
        <arg0 key="name"/>
      </field>   
    </form>好像不起做用,倒也没有任何错误提示。。郁闷...
   发表时间:2006-01-10  
没看明白,不是直接extends ActionForm以后重写validate不就可以了吗?
0 请登录后投票
   发表时间:2006-01-10  
lszone 写道
没看明白,不是直接extends ActionForm以后重写validate不就可以了吗?


但是我不想写rest,validate方法,而想用validate.xml中定义的去验证,但是从没有实验成功
0 请登录后投票
   发表时间:2006-01-13  
哈,这个问题是你的struts的版本和common-validator的版本不一致,
我也碰到过。
我那次从struts1.2.4升级到struts1.2.8的时候就出现这个问题的

我现在还是用的struts1.2.4和common-validator1.1.3,这个没有问题
0 请登录后投票
   发表时间:2006-01-13  
welllove53 写道
哈,这个问题是你的struts的版本和common-validator的版本不一致,
我也碰到过。
我那次从struts1.2.4升级到struts1.2.8的时候就出现这个问题的

我现在还是用的struts1.2.4和common-validator1.1.3,这个没有问题

谢谢您的指点,我晚上回去试试,可能真是您说的这样》:)
0 请登录后投票
   发表时间:2006-01-13  
最好拷贝发行包中的struts-example中所带的validator-rules.xml和validation.xml
然后在此基础上改,免得出错
0 请登录后投票
   发表时间:2006-01-14  
感谢各位回复,真是版本的问题,我原先用的是struts1.2.4可能和那个版本的validator不能一起使用,现在用1.1.3的validator就好了:),问题终于解决了,一身轻松。
0 请登录后投票
   发表时间:2006-01-15  
java.lang.NoSuchMethodException
这个一看就是包有问题了
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics