我的问题有点基本,因为我仍然在学习Struts2和Spring以及它们的集成。当我们在struts.xml中定义一个拦截器时,例如Struts2拦截器和弹簧集成
<interceptors>
<interceptor name="validation" class="org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor"/>
<interceptor-stack name="simpleStack">
<interceptor-ref name="validation">
<param name="excludeMethods">input,back,cancel,execute</param>
</interceptor-ref>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="simpleStack"/>
如果在applicationContext.xml我:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN"
"http://www.springframework.org/dtd/spring-beans-2.0.dtd">
<beans>
<bean id="user" class="struts.model.User"/>
<bean id="registerUserAction" class="struts.actions.UserInformationAction">
<property name="userBean" ref="user"/>
</bean>
<bean id="chooseUsernamePasswordAction" class="struts.actions.ChooseUsernameAction">
<property name="userBean" ref="user"/>
</bean>
</beans>
没有拦截用户定义的bean是在这两个动作(registerUserAction - > JSP - > chooseUsernamePasswordAction)持久的,我可以访问属性。一旦拦截器被引入,它看起来像值被清除。
- 首先从我读到的看起来像我可能会做这一切都是错误的。即集成了Spring的所有这些项目都处于单例默认模式,这可能是不正确的,因为多个用户将注册,因此每个用户都必须拥有自己的操作/用户bean。
- 发生什么或需要做什么来传递信息并使拦截器正常工作。
在应用程序上下文定义的动作,在我看来不错,但戴维说,你可能想他们的范围为__prototype__,你可能想SOPE用户bean作为__session__。同样如Dave所说,在设置拦截器堆栈之前,用户的属性会按照您的预期注入。但随着你的堆栈,因为你删除了参数注入,用户的属性保持不变 – Alban
感谢戴夫和奥尔本。 – user1111871
谢谢大家。为了澄清我的意图,可以将userbean视为包含所有用户相关信息(例如名称,地址,用户名)的bean。随着注册流程的进行,这些会被填充,即首先输入基本信息做一些验证的东西,然后在另一个页面中选择用户名和东西等等。所以我基本上是在我走的时候填充bean - 因此会话。你们可以详细说明你的意思吗,当你说我的堆栈消除了所有的struts2功能和关于参数注入。如果我有多个拦截器,例如CreateSession,定制拦截器 – user1111871