[英]Spring 3 MVC: Expose session scoped bean in MVC Controller method arguments
我想在我的控制器周围传递一个会话范围的域bean,以保持一致性和简单性 - 但这似乎不太可能OOTB。 希望有人可以提供建议。
问题: 会话范围的bean是否可以作为MVC Controller参数公开
似乎有一个注释:@SessionAttributes(“myBean”)但是这只维护一个控制器级范围。
我希望避免与HttpSession交互,而是通过我的控制器一致地传递我的域对象图。 这似乎是一个相当标准的要求。
这有好处:
这是当前的配置:
@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。 查看exposeContextBeansAsAttributes和exposedContextBeanNames属性。
例如,假设您想将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.