本帖最后由 binavid 于 2011-06-05 18:52:15 编辑

解决方案 »

  1.   

    struts2中的拦截器非常重要的组成部分.
    struts2默认实现了很多的拦截器..
    LZ你的参数自动赋值便是struts2自带拦截器定义的..
    如果要自定义拦截器又想使用struts2自带的拦截器.就必须在配置文件中把自定义的拦截器和自带的拦截器打成一个包;
     <interceptors>
                <interceptor name="hibernateThreadFilter" class="jkb.filters.HibernateThreadInterceptor"></interceptor>
                <interceptor-stack name="myInterceptorStack">
                    <interceptor-ref name="hibernateThreadFilter"/>
                    <interceptor-ref name="defaultStack"/>
                </interceptor-stack>
            </interceptors>
    LZ这段代码就是打包的过程.这里建议把 <interceptor-ref name="defaultStack"/>
    放于<interceptor-ref name="hibernateThreadFilter"/>的前面让action在加载的时候默认先加载struts2的默认的拦截器(也就是参数的封装等一系列操作)
    另外LZ在action中的配置错误
     <action name="login" class="loginAction">
                    <interceptor-ref name="hibernateThreadFilter" />
                    <result>/index.jsp</result>
                    <result name="login">/login.jsp</result>
                </action>
     <interceptor-ref name="hibernateThreadFilter" />便是LZ配置的错误..需改成 <interceptor-ref name="myInterceptorStack" />
    应该就可解决问题..
    框架学的半生不熟就用很是痛苦..慢慢熬吧
      

  2.   

    拦截器配置的话如果不配置Struts会给一个默认配置   如果给一个自定义配置的话就会引用自定义的配置
    但不会引用Struts默认的拦截器配置   struts 如果没有默认拦截器的话就不会进行值的封装   所有楼主在定义拦截器的时候,在配置后自定义的拦截器后加上<interceptor-ref name="defaultStack"/>即可  一楼的方法不错