2011-06-30 78 views
0

這是一個設計級別的問題,我需要關於什麼是更好的方法的意見。Spring和Struts 2的集成

我正在使用的應用程序使用Struts 2和Spring(用於依賴注入)。 每個Action類調用服務層來執行業務功能。所有數據都保存在模型類中。每個動作都使用模式來保存/編輯數據。這些Modal類被定義爲具有getter/setters的類的私有成員。

問題1)我們是否應該在應用程序上下文中將Modal類定義爲Beans?目前我沒有。在表單提交時,Struts本身創建實例。在編輯時(當我想在屏幕上顯示數據),我必須明確創建模態(使用新的)。什麼是更好的方法。

問題2)應該將aplCntx中Action類的bean定義爲scope =「prototype」嗎? Struts的自我不關心創建動作類的新實例嗎?

+0

Modal = Model ...? – leonbloy

+0

額外的模型類實際上是不必要的。因爲動作適合MVC中的模型角色。 – Chao

回答

1

1)我們應該在應用程序上下文中將Modal類定義爲Beans嗎?目前我沒有。在表單提交時,Struts本身創建實例。在編輯時(當我想在屏幕上顯示數據),我必須明確創建模態(使用新的)。什麼是更好的方法。

號,您不應該定義在春天上下文模式,他們應該只是簡單的POJO

+0

你的意思是我們不應該在應用程序上下文中定義模態,而應該在我們需要的時候創建一個新的實例。它是否正確? –

+0

正確<!-----------> –

3

問題1:
作爲Jigar說你不需要定義你的行動領域,如豆類您的應用程序上下文,因爲大多數時候他們只是在頁面和應用程序之間傳輸數據,所以很可能您已經從服務層創建了它們,只是想將它們傳遞給頁面以供演示,或者他們的數據是從頁面提交的在這種情況下,struts2負責實例化。

問題2:
在struts2中有一個對象工廠,默認情況下會處理動作創建。你可以改變它並指定spring來照顧動作創建。首先,你必須添加spring plugin for struts2到classpath那麼這行添加到您Struts2的配置文件:

<constant name="struts.objectFactory" value="org.apache.struts2.spring.StrutsSpringObjectFactory"/> 

那麼你的操作,如創建豆類:

<bean id="myActionBean" class="com.my.myAction" scope="prototype"> 
    ... required properties ... 
</bean> 

記住,你必須把範圍設置原型,這是它如何適用於struts2。然後在你的struts配置文件中:

<action name="myaAction" class="myActionBean"> 
    ... required result mapping ... 
</action>