2

我前段时间使用 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 来做到这一点:))。

我不知道该怎么做:)

干杯

4

1 回答 1

1

有几种方法...

1) Struts 为 DI 使用 spring,您也可以为此使用 spring 查看 struts2-spring-plugin

2)您可以使用我在上一个问题中提到的 SessionAware。但是我确实提到了拦截器协同工作,因为会话范围的对象本质上是横切关注点。如果没有拦截器,解决方案将被迫存在于您的操作中,或者更糟糕的是视图层......一遍又一遍地重复......正如你所说的那样“不好”。

3)如果你强烈地面向 MVC,请查看 modelDriven 和 scopedModelDriven。后者将为您的操作设置一个模型,该模型可以在会话范围内(其他范围可能),如果模型不存在,那么它将为您实例化......这对多页表单有好处,成功完成然后表单可以删除这个对象。我不太喜欢 modelDriven,它会使对 Action 的访问变得复杂。

于 2010-12-12T09:03:18.243 回答