【问题标题】:Struts 1.2.9 to spring MVC migration - Handling Scope of ActionFormsStruts 1.2.9 到 Spring MVC 迁移 - ActionForms 的处理范围
【发布时间】:2018-06-28 14:17:55
【问题描述】:

我们正在将 Struts 1.2.9 应用程序迁移到 Spring MVC。

我们被困在定义为“会话”的 ActionForm 范围的一个点上。默认情况下,这些都在“请求”范围内,并且了解迁移到 Spring,我们可以将它们重用为默认设置在“请求”范围内的模型对象。

但是我迷失了如何处理“会话”范围。请多多指教。

struts-config.xml

<action path="/editSvc" scope="session"
    type="com.xyz.myapp.actions.SvcCodeEditAction" name="svcCodeForm"
    validate="false" parameter="reqCode">
    <forward name="success" path="/WEB-INF/jsp/svccode_edit.jsp" />
</action>

动作类

//Code in com.xyz.myapp.actions.SvcCodeEditAction
  if (request.equals(mapping.getScope())) {
        request.setAttribute(mapping.getAttribute(), form);
    } else {
        setSessionAttribute(session,mapping.getAttribute(), form);
    }

【问题讨论】:

    标签: spring-mvc migration struts


    【解决方案1】:

    您可以通过在 bean 类声明上方使用 Spring @Scope("session") 注解来获得几乎相同的功能。

    spring 3.0 版本的参考指南中有很好的解释:

    https://docs.spring.io/spring-framework/docs/3.0.0.M3/reference/html/ch04s04.html

    一般来说,如果你将 spring-webmvc 和 spring-web 添加到你的项目中,你可以使用

    @Bean
    @Scope("session")
    public SomeBean someBean() {
        return new SomeBean();
    }
    

    或者,如果您更喜欢使用 xml 而不是 java config,您可以使用与此类似的方法:

    <bean id="userPreferences" class="com.foo.UserPreferences" scope="session"/>
    

    还有一个很好的教程:

    http://www.baeldung.com/spring-bean-scopes

    然后,如果您将 bean 添加到模型中,如果 bean 具有 @SessionScope@Scope("session") 或任何其他 bean 范围声明,它将在会话中自动设置。默认情况下,bean 会被添加到请求范围内。

    【讨论】:

    • 感谢您的快速回复。这是否意味着,我们可以避免在 Action 类中使用此代码将 bean 设置回作用域? - request.equals(mapping.getScope())
    • 我已经编辑了关于如何在控制器中处理它的帖子,更详细的解释可以在这里找到:javacodegeeks.com/2013/06/testing-spring-session-scope.html
    • 回答您的问题,是的,您可以摆脱该代码。
    猜你喜欢
    • 2018-10-20
    • 1970-01-01
    • 2013-02-14
    • 1970-01-01
    • 1970-01-01
    • 2013-08-06
    • 2020-03-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多