Spring 3 MVC:在MVC控制器方法参数中揭示会话范围的bean



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

问题:可以将会话划分的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";
         }
   }

'客户'会话bean是使用XML配置的AOP-Proxy(CGLIB)的常规POJO,可以将scoped Bean注入Singletons(控制器和服务类):

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

以下问题几乎是相同的,但是没有答案不涉及弹簧3核心框架的扩展。

春季的设计师有意省略了这一点?我的目的是使用域模型在不使用" bean"和一层映射器的情况下备份表单。

任何人都可以建议/或指示这是不良的做法吗?

定制解决方案的先验问题:

如何使用Spring MVC

将会话属性作为方法参数(参数)传递

请注意:尝试最大程度地减少弹簧框架的依赖项并使用注释支持ESP JSR -303等。

spring-mvc可以将应用程序上下文的bean公开到视图层,如果您想做的话。

例如,可以指示InternalResourCeViewResolver在上下文中或仅指定的bean。查看ExpoSecontextBeanSAsattributes和ExposedContextBeannames属性。

例如,说您想将Beans 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>

相关内容

  • 没有找到相关文章

最新更新