在实验中addActionError("");对有跳转有影响!在"input"页上addActionError("")后,系统都将认为是 validate错误直接放回input不执行人和方法.
这种现象好像不应该发生,不知道如何解决?
<action name="m_Login" method="login" class="LoginAction">
<result name="input">login.jsp</result>
<result name="success">main.jsp</result>
<result name="error">login.jsp</result>
<interceptor-ref name="defaultStack"/>
</action>

          public String login() throws Exception{ System.out.println("-- << UserAction.login()  >> --");
  //取session校验码
if (vercode != null && vercode.equals("randCode")) {
        //略
System.out.println("-- << UserAction.login()  >> SUCCESS --");
return SUCCESS;
} else {
addActionError("用户名/密码不匹配");
System.out.println("-- << UserAction.login()  >> ERROR --");
return ERROR;
} } else {
addActionError("验证码不匹配,请重新输入");
System.out.println("-- << UserAction.login()  >> ERROR --");
return ERROR;
} }以上login.jsp上输入正确可以通过
09:49:27,328 DEBUG PrefixMethodInvocationUtil:141 - cannot find method [validateLogin] in action [cz.loginSystem.action.LoginAction@142f703]
09:49:27,328 DEBUG PrefixMethodInvocationUtil:141 - cannot find method [validateDoLogin] in action [cz.loginSystem.action.LoginAction@142f703]
09:49:27,328 DEBUG DefaultActionInvocation:383 - Executing action method = login
-- << UserAction.login()  >> --
randCode[936222] vercode[123] user[userName1] passwd[userPasswd1]
-- << UserAction.login()  >> login --
09:49:27,343 DEBUG DefaultListableBeanFactory:385 - No bean named 'org.apache.struts2.dispatcher.ServletDispatcherResult' found in org.springframework...略一旦出错执行了 addActionError("用户名/密码不匹配") 或 addActionError("验证码不匹配,请重新输入"); 在 login.jsp上体现以后,就再也进不了"Executing action method = login",更别说跳转其他页了.09:49:55,671 DEBUG PrefixMethodInvocationUtil:141 - cannot find method [validateLogin] in action [cz.loginSystem.action.LoginAction@142f703]
09:49:55,671 DEBUG PrefixMethodInvocationUtil:141 - cannot find method [validateDoLogin] in action [cz.loginSystem.action.LoginAction@142f703]
09:49:55,671 DEBUG DefaultWorkflowInterceptor:215 - Errors on action cz.loginSystem.action.LoginAction@142f703, returning result name 'input'
09:49:55,671 DEBUG DefaultListableBeanFactory:385 - No bean named 'org.apache.struts2.dispatcher.ServletDispatcherResult' found in org.springframework....略
09:49:55,687 DEBUG DefaultListableBeanFactory:195 - Ignoring constructor [public org.apache.struts2.dispatcher.ServletDispatcherResult(java.lang.String)] of bean 
09:49:55,687 DEBUG ServletDispatcherResult:113 - Forwarding to location login.jsp只要去掉addActionError("..."); 一切正常.这似乎<result name="error">login.jsp</result> 和<result name="input">login.jsp</result>不能是同一页?
但以上程序是 <<某权威指南>>上的例子,他这么写应该没错!那我错在哪里?请高手赐教!!

解决方案 »

  1.   

    就再也进不了"Executing action method = login",更别说跳转其他页了.
    这句话意思不理解,啥意思??
      

  2.   

    一旦出错执行了 addActionError("用户名/密码不匹配") 或 addActionError("验证码不匹配,请重新输入")你这里的“出错执行”又是啥意思??
      

  3.   

    自我批评!
        原来是 Spring 中ACTION 应该设置为 singleton="false"  或者  scope="prototype",才能保证每次new一个ACTION 出来,否则ACTION 始终是同一个实例!所以错误一旦出现,就一直存在,第二次再执行方法调用步骤之前struts发现有fieldError就跳过处理返回input.
      

  4.   


    恩, singleton的这个问题我也遇到过