Java Spring3MVC:在MVC控制器方法参数中公开会话范围的bean

Java Spring3MVC:在MVC控制器方法参数中公开会话范围的bean,java,spring,model-view-controller,controller,session-bean,Java,Spring,Model View Controller,Controller,Session Bean,为了一致性和简单性,我想在我的控制器周围传递一个会话范围的域bean,但这似乎不可能。希望有人能提出建议 问题:会话范围的bean可以作为MVC控制器参数公开吗 这里似乎有一个注释:@SessionAttributes(“myBean”),但是它只维护一个控制器级别的作用域 我希望避免与HttpSession交互,而是通过控制器一致地传递域对象图。这似乎是一个相当标准的要求 这有以下好处: 可测试性-只需注入bean进行测试,而不必模拟HttpSession 抽象-避免Servlet模型问题

为了一致性和简单性,我想在我的控制器周围传递一个会话范围的域bean,但这似乎不可能。希望有人能提出建议

问题:会话范围的bean可以作为MVC控制器参数公开吗


这里似乎有一个注释:@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是一个常规的POJO,使用XML配置的aop代理(CGLIB),允许将会话范围的bean注入到单例(控制器和服务类)中:



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

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

例如,可以指示InternalResourceViewResolver公开上下文中的每个bean,或者只公开指定的bean。请看一看数据和属性

例如,假设您想将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>

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