我想在控制器周围传递会话划分的域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>