二话不说,先上代码:JSP代码:(我用的是STRTUS2标签,使用SAMPLE模板)------------------------------------------------
 
  <body>
   <s:fielderror/>
   <s:form id="form1" action="resetPwSafeHome.do" namespace="/u/b">
  <table>
  <tr>
<td colspan="2"><s:actionmessage/></td>
</tr>
  <tr>
<td colspan="2">请为您的帐号重设新密码</td>
</tr>
  <tr>
<td>输入新密码</td>
<td><s:password id="password" name="password"/></td>
</tr>
  <tr>
<td>确认新密码</td>
<td><s:password name="rePassword"/></td>
</tr>
  <tr>
<td colspan="2">
<s:submit value="立即修改"/>&nbsp;&nbsp;&nbsp;<s:reset value="重置"/>
</td>
</tr>
</table>
   </s:form>
     </body>ACTION代码:=-----------------------------------------------------=
ACTION的类名是:UrSayHiMyUserAction.java
 private String password;//GET 和 SET方法都有且无误,这里省略。
//其他和测试无关的业务代码也省略 //修改密码-来自安全中心
public String resetPasswordSafeHome(){

UrSayHiMyUser userObj = 
(UrSayHiMyUser) myUtilAction.getAttributeInSession("USER_OBJ"); //获取用户对象

                  //调用业务逻辑service接口来重设新密码
UrSayHiMyUser ushmu = urSayHiMyUserService.upd_resetPassword(userObj.getRealId(), password);

if(ushmu == null){
         addActionMessage("重设密码失败,请重试");
return "RESET_PASSWORD_ERROR"; 
}else{ //修改密码成功
return SUCCESS;
}

} struts.xml配置-----------------------------------------------------
      <!-- 安全中心首页-设置密码-验证密保来设置新密码 -->
         <!--注意这里的ACTION名 和 METHOD方法名稍微不同 ,我以下验证框架的名字使用的是 ACTION名,所以应该没错-->
     <action name="resetPwSafeHome" class="urSayHiMyUserAction" method="resetPasswordSafeHome">
           <!-- 重置密码失败 -->
     <result name="RESET_PASSWORD_ERROR">
     /WEB-INF/background/user/ur_security_reset_pw.jsp
     </result>
           <!-- 重新验证密保 -->
     <result name="NO_HAS_CHECK_QUES" type="redirectAction">
     <param name="actionName">rePwToGetQues</param>
     </result>
     <!-- 设置密码成功 -->
     <result>
     /WEB-INF/background/user/ur_security_reset_pw_reset_success.jsp
     </result>
     </action> 
验证XML文件名和代码:-----------------------------------
文件名:UrSayHiMyUserAction-resetPwSafeHome-validation.xml  (由于ACTION里有多个方法,所以我是针对某个方法进行验证的,这里的resetPwSafeHome是Action的.do的名,而不是方法名,所以这里应该没错)
该配置文件,我也是置于action类的同目录下<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC 
   "-//OpenSymphony Group//XWork Validator 1.0.2//EN" 
   "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators> <field name="password">
<field-validator type="stringlength">
<param name="minLength">6</param>
<param name="maxLength">12</param>
<message>密码长度应为6~16位</message>
</field-validator>
</field>

</validators>
===================================================================测试结果:
1 如果不使用该验证配置文件,则没有任何问题,程序正常运行。
2 如果将验证配置文件加上,我在密码输入框,输入小于6个字符的密码,比如 123 的时候,提交以后,则会报以下错误:
错误太长提交不了,所以删减了些
Struts Problem ReportStruts has detected an unhandled exception:
Messages:     1. Error reading 'errorData' on type org.apache.jasper.runtime.PageContextImpl
   2. An exception occurred processing JSP page /errorpages/exception.jsp at line 11 8: 9: 10:
      绯荤粺鎵ц鍙戠敓閿欒锛屼俊鎭弿杩板涓嬶細
      11:
      閿欒鐘舵�浠g爜鏄細${pageContext.errorData.statusCode}
      12:
      閿欒鍙戠敓椤甸潰鏄細${pageContext.errorData.requestURI}
      13:
      閿欒淇℃伅锛�{pageContext.exception}
      14:
      Stacktrace:File:  javax/servlet/jsp/PageContext.java
Line number:  515
Stacktraces
org.apache.jasper.JasperException: An exception occurred processing JSP page /errorpages/exception.jsp at line 11 8: 9: 10:
绯荤粺鎵ц鍙戠敓閿欒锛屼俊鎭弿杩板涓嬶細
11:
閿欒鐘舵�浠g爜鏄 細${pageContext.errorData.statusCode}
12:
閿欒鍙戠敓椤甸潰鏄 細${pageContext.errorData.requestURI}
13:
閿欒淇℃伅锛�{pageContext.exception}
14:
Stacktrace:    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:510)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:419)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    
//删减了些
   
javax.el.ELException: Error reading 'errorData' on type org.apache.jasper.runtime.PageContextImpl
    javax.el.BeanELResolver.getValue(BeanELResolver.java:66)
    javax.el.CompositeELResolver.getValue(CompositeELResolver.java:54)
    org.apache.el.parser.AstValue.getValue(AstValue.java:123)
    org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186)
    org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:935)
    org.apache.jsp.errorpages.exception_jsp._jspService(exception_jsp.java:72)
   
   //删减了些 
(StrutsPrepareAndExecuteFilter.java:91)
    org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    org.apache.struts2.dispatcher.ActionContextCleanUp.doFilter(ActionContextCleanUp.java:102)
    
(OpenSessionInViewFilter.java:198)
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
    org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
    org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
    org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
    org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
    java.lang.Thread.run(Unknown Source)
    
java.lang.NullPointerException
    javax.servlet.jsp.PageContext.getErrorData(PageContext.java:515)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    java.lang.reflect.Method.invoke(Unknown Source)
    javax.el.BeanELResolver.getValue(BeanELResolver.java:62)
    javax.el.CompositeELResolver.getValue(CompositeELResolver.java:54)
    org.apache.el.parser.AstValue.getValue(AstValue.java:123)
    org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186)
    org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:935)
          
//删减了些
(StrutsPrepareAndExecuteFilter.java:91)
    org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    org.apache.struts2.dispatcher.ActionContextCleanUp.doFilter(ActionContextCleanUp.java:102)
    org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    com.showjob.filter.characterencoding.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:26)
    org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96)
   //删减了些(OpenSessionInViewFilter.java:198)
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
    org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
 //删减了些
    
====================================================
大家分析下,这是为什么呢??? 我的项目使用的是:SSH框架,STRUTS2.1.8  HIBERNATE3  SPRING2.5 

解决方案 »

  1.   

    错误在:/errorpages/exception.jsp里面,这个页面你用的是el标签吧,应该是你include近来的...
    在page范围内找不到errodata这个属性!
      

  2.   

    1。可能出现问题1:1>.UrSayHiMyUserAction.java  应该继承ActionSupport类。
    2>.校验文件和UrSayHiMyUserAction.java在同一目录下。2。可能出现问题2:可能是校验文件命名错误请求名resetPwSafeHome.do配置文件中的是resetPwSafeHome 不一值
      

  3.   

    你要做配置文件的数据校验,,必须实现Validatable 还是ValidateAware接口,具体哪个记得不太清了.!
    不实现是无法实现校验的!
    当然,直接继承ActionSupport就可以了,因为这个类实现了上面两个接口.!
      

  4.   

    别的还没看, 你先把Action的继承了ActionSupport以后,有错误再来
      

  5.   


    我的JSP里并没有include exception.jsp页面。exception.jsp页面是专门用于接受错误的显示页面:以下是源代码:
    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isErrorPage="true"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      <title>系统执行发生错误</title>
    </head>
    <body>
      <div>系统执行发生错误,信息描述如下:</div>
      <div>错误状态代码是:${pageContext.errorData.statusCode}</div>
      <div>错误发生页面是:${pageContext.errorData.requestURI}</div>
      <div>错误信息:${pageContext.exception}</div>
      <div>
         错误堆栈信息:<br/>
        <c:forEach var="trace" items="${pageContext.exception.stackTrace}">
           <p>${trace}</p>
        </c:forEach>
      </div>
    </body>
    </html>
    估计是打印错误时候需要在这个页面中显示,但是这个页面的某个地方有误或是不兼容什么的吧,但是说到底还是这个验证框架使用出错了,不然不会跟这个页面扯上关系的。
      

  6.   


    请求名是resetPwSafeHome.do,那么配置文件名字不应该是:
    UrSayHiMyUserAction-resetPwSafeHome-validation.xml  吗?? 没错吧??
    action类名-action请求名-validation.xml .你的意思难道是还要把 .do加进来吗??
    UrSayHiMyUserAction-resetPwSafeHome.do-validation.xml  ??
    不是吧??此外,加了这个配置文件以后,就会出错,说明STRUTS是找到它了,不然的话,名字不对不会自动找到的。
      

  7.   


    public class UrSayHiMyUserAction extends ActionSupport{   。我的ACTION本来就已经继承了 ActionSupport 了
      

  8.   

    不对不对.! LZ你说错了.. 校验文件的格式是:
    action类名-需要校验的方法名-validation.xml  是方法名, 不是你配置文件里面配的action的名
      

  9.   


    哦?? 我记得我看书是说aciton的访问名呀,那我试试,一会把结果告诉大家
      

  10.   

    Struts2的书都不怎么好.!  去看官方的文档.那里才是权威
      

  11.   


    测试结果:
    当把配置文件改为 UrSayHiMyUserAction-resetPasswordSafeHome-validation.xml
    以后,则发现程序运行没错了,但是,验证框架也不起作用了,输入小于6位数的密码123,也可以通过设置成功。说明,struts2匹配不了找不到这个.xml文件,说明了,xml文件的文件名命名规则应该是:
    action类名-action请求名-validation.xml 。这点在《Hibernate开发与实战--刘伟,张利国 编著》的书中P398页有注明,原话是“...如果是一个action类提供了多个方法的情况,则校验配置文件的命名规则必须符合:‘action类名-action映射名-validation.xml’的规则.....”
      

  12.   

    测试结果:
    当把配置文件改为 UrSayHiMyUserAction-resetPasswordSafeHome-validation.xml
    以后,则发现程序运行没错了,但是,验证框架也不起作用了,输入小于6位数的密码123,也可以通过设置成功。说明,struts2匹配不了找不到这个.xml文件,说明了,xml文件的文件名命名规则应该是:
    action类名-action请求名-validation.xml 。这点在《Hibernate开发与实战--刘伟,张利国 编著》的书中P398页有注明,原话是“...如果是一个action类提供了多个方法的情况,则校验配置文件的命名规则必须符合:‘action类名-action映射名-validation.xml’的规则.....”
      

  13.   


    你好,我的一楼正文里都写很清楚了,和action类同一目录下
      

  14.   


    得力于这位兄弟的帮助,问题解决了,我漏了在struts的配置文件里加上一个:     <!-- 服务器端验证 -->
         <result name="input">
       /WEB-INF/background/user/ur_security_reset_pw.jsp
    </result>了。
    只要有验证,这个是必须的。思考了一下,觉得应该是哦。
    因为原先的代码里,当出现了错误以后,struts将返回哪个页面进行错误提示呢?如果没有配置这个result,则不知道该返回哪里提示。所以,需要配置这个result,告诉struts2,出现了错误,则返回到某个页面进行提示。谢谢 redlotus_lyn 兄啦~~~  结贴~~~