繁体   English   中英

Spring 3 MVC:在MVC Controller方法参数中公开会话范围的bean

[英]Spring 3 MVC: Expose session scoped bean in MVC Controller method arguments

我想在我的控制器周围传递一个会话范围的域bean,以保持一致性和简单性 - 但这似乎不太可能OOTB。 希望有人可以提供建议。

问题: 会话范围的bean是否可以作为MVC Controller参数公开


似乎有一个注释:@SessionAttributes(“myBean”)但是这只维护一个控制器级范围。

我希望避免与HttpSession交互,而是通过我的控制器一致地传递我的域对象图。 这似乎是一个相当标准的要求。

这有好处:

  • 可测试性 - 只需注入bean进行测试,而不必模拟出HttpSession
  • 抽象 - 避免Servlet模型问题和业务问题

这是当前的配置:

@Controller
@SessionAttributes("customer")
public class LoginController {

   @Inject Customer customer;

   @RequestMapping(value = "/login", method = RequestMethod.GET)
   public String welcome(Customer customer) {
         ...
         return "loginDetailsView";
   }

   public String processLogin(@Valid Customer customer, BindingResult bindingResult) {
         ...
         if (bindResult.hasErrors()) {
             return "loginDetailsView";
         else {
             return "homePageView";
         }
   }

'Customer'会话bean是使用XML配置的aop-proxy(CGLIB)的常规POJO,允许将会话范围的bean注入单例(控制器和服务类):

<beans:bean id="customer" class="com.mypackage.domain.Customer" scope="session">
            <aop:scoped-proxy proxy-target-class="true"/>
</beans:bean>

以下问题实际上是相同的,但没有任何答案不涉及对Spring 3核心框架的扩展。

这是Spring的设计师故意遗漏的吗? 我的意图是使用域模型来支持表单,而不使用'form beans'和一层映射器。

任何人都可以建议/或表明这是不是很糟糕的做法?

先前的问题与定制的解决方案:

如何使用Spring MVC将会话属性作为方法参数(参数)传递

请注意:尝试最小化对Spring框架的依赖性并使用注释支持esp JSR-303等。将采用任何OOTB解决方案 - 请不要建议自定义扩展。

如果您希望这样做,Spring-MVC可以将应用程序上下文的bean公开给视图层。

例如,可以指示InternalResourceViewResolver公开上下文中的每个bean,或者只显示指定的bean。 查看exposeContextBeansAsAttributesexposedContextBeanNames属性。

例如,假设您想将bean beanA和beanB公开给JSP。 您可以在上下文中声明视图解析器:

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
   <property name="exposedContextBeanNames">
      <list>
         <value>beanA</value>
         <value>beanB</value>
      </list>
   </property>
</bean>

或者,只是暴露每个bean:

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
   <property name="exposeContextBeansAsAttributes" value="true"/>
</bean>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM