我以前使用JSF,我发现MODEL的概念在那里非常重要。在这里,在struts2上,我看到这个概念有点过时了。例如,似乎无法设置Bean会话作用域;相反,我需要将整个Bean(对象)放入会话(手动)。
所以,在某些方法中,这并不好。 例如,对于页面切换,我已经实现了(在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 :(得分:1)
有几种方法......
1)Struts使用弹簧进行DI,你也可以用弹簧为目的查看struts2-spring-plugin2)您可以像我在上一个问题中提到的那样使用SessionAware。但是我确实提到了拦截器一起工作,因为会话范围的对象本质上是跨领域的关注点。如果没有拦截器,你的行动中将会强制存在一个解决方案,或者更糟糕的是视图层...反复重复...当你说它“不好”时。
3)如果您强烈面向MVC,请查看modelDriven和scopedModelDriven。后者将为您的操作设置一个模型,该模型可以在会话范围内(其他范围是可能的)如果模型不存在则会为您实例化...这对于多页表单很有用,顺利完成然后表单可以删除此对象。我真的不喜欢modelDriven它可以使对Action的访问变得复杂。