我需要你对滤镜使用的建议。只是想知道我在想什么是一个好的可能的方式。
因此,我的任务是使用JSP、Spring MVC 2.5、javascript等开发5-6个屏幕。
所有这些屏幕共享许多公共数据元素,如下拉列表等。
我正在考虑实现一个过滤器,并在过滤器中的spring中填充这些下拉值,这样,在过滤器的ModelMap模式下的每个屏幕都可以获得这些数据。
这是一种正确的方法吗?
发布于 2013-03-09 03:01:40
我相信筛选器可以做到这一点,但是我会远离这种方法。你也可以使用Spring的拦截器来做同样的事情,同时仍然利用Spring的特性,比如依赖注入、事务管理和Spring数据包。
在dispatcher的配置中设置拦截器。
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<bean class="org.my.domain.interceptors.LookupHandlerInterceptor" />
</mvc:interceptor>
</mvc:interceptors>然后定义你的拦截器类:
public class LookupHandlerInterceptor extends HandlerInterceptorAdapter {
@Autowired
LookupLoaderApplicationListener loader;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
request.setAttribute("lookupList", loader.getCategories());
return super.preHandle(request, response, handler);
}
}这种方法将允许您利用可能在应用程序中使用的其他Spring特性,例如您可能设置的任何持久性。然后,您可以在数据库中管理此列表。
发布于 2013-03-09 03:10:44
我认为,违反最小意外原则,并在应用程序的单独部分中隐藏对控制器的正确功能至关重要的代码是不值得的,因为这样做会挤出/cleverness的任何“魔力”。
为什么对未来的开发人员隐藏设置屏幕的代码?
仅仅因为它们现在都共享共同的参考数据,它们会永远和永远吗?一旦不同屏幕的需求开始出现分歧,就会很快变得丑陋。
基本上,您拥有使用继承而不是组合来创建控制器的所有缺点,此外,您甚至看不到控制器中的代码。我将简单地创建一个执行公共工作的实用程序bean,将其注入到控制器上,并编写一行@ModelAttribute方法来调用它。当他们的个人需求在未来发生变化时,将会有更少的混乱。
https://stackoverflow.com/questions/15301204
复制相似问题