我使用这个框架,有很多地方不明白,在Action层里,验证登陆的那个类继承了ActionSupport类,并复写了Validate方法,但是我看着这就是一个很普通的方法,但是为什么在验证为空时会跳转到配置标签里的input里啊?这个方法是空的什么也没返回啊,还有我并没有要求程序执行这个方法,为什么就自动执行了啊?求高人指教,讲明白点,越明白越好!

解决方案 »

  1.   

    validate()是struts2默认的方法,同execute()方法一样,都是默认必须执行的。struts2框架中应该有单独的拦截器去处理,可以去研究一下。
      

  2.   

    容器自动调用的,如果添加了错误信息则自动返回“input”...
      

  3.   

    恩,我知道是自动调用的,我就是想明白为什么使用这个框架就会自动调用这些方法!怎么才能知道Struts的工作原理啊?
      

  4.   

    这个别人一时半会也跟你讲不清啊你在apache上下一个源码包。。然后导进去,跟踪进去看。。不管明白与否,不要想看懂每一行代码。。粒度控制在方法级别上知道这个方法干什么就行do it yourself  
      

  5.   

    <!-- 这个拦截器会对STRUTS2的VALIDATE框架进行验证处理,如果验证失败只在action里放置错误信息 -->
    <interceptor name="validation" class="com.opensymphony.xwork2.validator.ValidationInterceptor"/>
    <!-- 这个拦截器会对判断ACTION是否属于ValidationAware这个类如果是则含有错误信息则返回Action.INPUT -->
    <interceptor name="workflow" class="com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor"/>
    具体代码:
    if (action instanceof ValidationAware) {
                ValidationAware validationAwareAction = (ValidationAware) action;            if (validationAwareAction.hasErrors()) {
                 if (_log.isDebugEnabled()) {
                 _log.debug("Errors on action "+validationAwareAction+", returning result name 'input'");
                 }
                 return inputResultName;
                }
            }