2016-12-16 63 views
1

我是Struts2的新手。Struts 2.3:更改Action Bean的範圍

我在Struts文檔中找不到關於bean範圍的任何信息,Struts默認使用Request範圍,這不適合我的項目。

我在Struts1中發現了很多關於範圍使用情況的信息,但所有文檔鏈接都不可用。

您能否建議如何設置Action Classes的作用域?

+0

您可以閱讀更多關於範圍[這裏](http://stackoverflow.com/a/27670618/573032) –

+0

[This](http://stackoverflow.com/a/20458850/573032)答案也是關於範圍,但(不是upvoted)。關於您的回覆* Struts默認使用Request範圍*。 –

回答

1

Struts它是一個前端 MVC框架。

Struts2操作是控制器(MVC的C),不應該用作bean;他們應該將bean從底層業務層轉移到View(MVC的V,例如JSP)。

你不應該有50個屬性的動作,你應該有一個動作與一些POJO與50個屬性內的屬性。在Struts2的後面,你可以在業務層上運行任何東西,例如Java EE(EJB 3,JPA 2,CDI等),以及它的所有bean和範圍,或者Spring,或者任何其他的東西。

Struts2操作是線程安全的,按請求實例化,這是如何研究工作的。不要試圖改變行爲的範圍,將它們用作bean,嘗試瞭解什麼是行爲以及如何使用它們。我建議使用Maven運行Struts2 + Java EE> = 6 + Struts2-CDI-plugin + Struts2-Convention-plugin + Struts2-Json-plugin。 Maven原型。

+0

謝謝你的回答。我在項目中有一個Struts2 + EJB3,我需要從db中加載一些數據以初始化並在屏幕上使用。我不能做這個操作的每個請求 - 因爲這個操作太昂貴了。目前我使用會話來存儲屏幕數據 - 但這是非常糟糕的做法...任何建議,如何在請求之間存儲數據?我認爲,使用控制器作爲單身人士或範圍會話 - 這是一個非常好的主意,像servlet或彈簧mvc控制器.. – Aventes

+0

如果數據是每個用戶,會話是好的。如果數據很常見,請將其緩存,例如。在ejb3 @Singleton。閱讀更多:http://stackoverflow.com/questions/26733141/load-and-cache-application-scoped-data-with-singleton-and-stateless –

+1

謝謝你的幫助!問題解決了) – Aventes