2010-12-11 33 views
2

我在使用JSF的時候,我發現MODEL的概念在那裏非常重要。在這裏,在struts2上,我看到這個概念已經過時了。例如,似乎不可能設置一個Bean會話作用域;相反,我需要將整個Bean(對象)放入會話中(手動)。Struts2 - 這是一個「MVC」框架的偉大戰略嗎?

因此,在某些方法中,這並不好。 例如,用於頁面切換,我已經實現(在JSP頁面)這樣的:

<s:div cssClass="content" id="content"> 
<% 
    String pageValue=request.getParameter("page"); 
    if((pageValue!=null) && (pageValue.compareTo("articles")==0)) { 
     %> 
      <s:include value="articles/articles.jsp"></s:include> 
     <% 
    } else { 
     %> 
      <s:include value="homepage/homepage.jsp"></s:include> 
     <% 
    } 
%> 
</s:div> 

這是Struts2的工作的正確方法?或者,最好把一些值放入Beans並根據Beans值生成頁面? (模型概念,但我真的不知道設置Bean的範圍很熱,我不會把它們放在會話中,否則就像程序編碼,我可以使用PHP來做到這一點:))。

我不知道該怎麼做,否則:)

乾杯

+0

你不應該在MVC框架中使用scriplet例如。 struts2 – 2013-01-15 10:04:23

回答

1

有幾種方法?

1)Struts使用彈簧DI,你也可以用彈簧這個目的看看struts2-spring-plugin

2)你可以像我在前面的問題中提到的那樣使用SessionAware。不過,我確實提到攔截器協同工作,因爲會話作用域對象本身就是交叉關注點。如果沒有攔截器,解決方案將會被迫存在於你的行爲中,或者更糟的是視圖層......一遍又一遍地重複着......當你把它「不好」時。

3)如果你強烈的MVC導向看modelDriven和scopedModelDriven。後者將爲您的操作設置一個模型,可以在會話範圍內(其他範圍是可能的),如果模型不存在,則會爲您實例化...這對於多頁表單很有用,成功完成該表單可以刪除該對象。我不太喜歡modelDriven,它可以使訪問Action變得複雜。

+0

+1到Quaternion – 2010-12-12 14:11:46

+1

實際上,Struts2使用XWork for DI,但有插件可以使用Spring或Guice。 – 2010-12-12 16:47:40

+0

但爲什麼是春天?我不想用Spring。 Spring是另一個框架,不是嗎?我如何用一個清晰​​的Struts2應用程序來做到這一點? – markzzz 2010-12-12 21:22:36