我的問題有點基本,因爲我仍然在學習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