2013-03-08 133 views
1


我需要您对过滤器使用的建议。只是想知道我在想什么 是一个很好的方法。
因此,我一直负责使用JSP,Spring MVC 2.5,javascript等开发5-6个屏幕。
所有 这些屏幕共享很多常见数据元素,例如下拉列表等。
我在考虑 的实现过滤器并在筛选器中的弹簧ModelMap 中填充这些下拉值,以便筛选器的URL模式 下的每个屏幕都可以获取此数据。
这是一个正确的方法吗?Spring MVC Filter解决方案

+1

过滤?绝对不。也许是Spring拦截器,但是我个人不愿意这么粗暴地违反最小惊喜的原则,寻求过度微观的代码重用方法。将代码放入实用程序类中,并从每个控制器上的@ModelAttribute方法调用它。 – Affe 2013-03-08 19:00:18

+0

@Affe我同意拦截器的方法,我已经成功实施了这种方法。 – 2013-03-08 19:03:47

+0

感谢评论Affe。微代码重用方法是我的目标:) – Tiles787 2013-03-08 19:04:44

回答

2

我相信过滤器可以做到这一点,但我会远离这种方法。你也可以使用Spring的拦截器来做同样的事情,并仍然利用Spring的特性,例如依赖注入,事务管理和Spring Data包。

在您的配置调度程序设置拦截器。

<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功能的优势,你可以使用你的应用程序中,如您可能设置的任何持久性。然后你可以在你的数据库中管理这个列表。

+0

谢谢凯文。我认为要保持模型属性中的数据,我必须使用@SessionAttributes和modelMap,以在多个请求之间保持它。 – Tiles787 2013-03-08 19:05:39

1

我认为在应用程序的一个单独部分中违反最少惊喜的原则并隐藏对于控制器的正确功能至关重要的代码是不值得的。

为什么隐藏未来开发者设置屏幕的代码?

正因为他们现在都拥有共同的参考数据,他们会永远和永远吗?只要不同屏幕的要求开始发散,就会变得很难看。

你基本上有所有的缺点,使用继承而不是组成来制作一个控制器,再加上你甚至不能看到控制器的代码。我只是简单地制作一个实用的bean,执行常见的工作,将它注入控制器,然后编写一行@ModelAttribute方法来调用它。当他们的个人需求在未来发生变化时,将会少得多。