SpringFramework&多个控制器的瓷砖设计模式

时间:2012-09-28 11:58:55

标签: spring-mvc tiles2 apache-tiles

我是Tiles的新手,我喜欢它。

我的问题是,我在SpringFramework的模板定义中有一个head,body和footer tile。 我想在头部磁贴中显示一些用户信息,并使用一些动态数据在页脚中显示最后一次登录ip。 我的意思是,我可以这样做,如果我在每个使用此模板的控制器中指定(addAttribute)每个变量。

是否有任何方式头/脚的磁贴从自己的弹簧控制器询问数据? 或者我如何在不在每个控制器中重复源代码的情况下向头部和页脚区块添加信息(variableValue)。

由于

2 个答案:

答案 0 :(得分:0)

可能有几种方法可以实现这一目标,但一种方法可能是通过过滤器。

在您的web.xml中,您将定义一个新过滤器并将其映射到所有URL,即

<filter>
  <filter-name>myFilter</filter-name>
  <filter-class>path.to.my.filter.MyFilter</filter-class>
</filter>

<filter-mapping>
  <filter-name>myFilter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

然后,您将在<filter-class>元素中指定的路径(在本例中为path.to.my.filter.MyFilter)创建一个类,并创建实际的过滤器。

至于过滤器的实现,还有几种方法可以实现,我建议使用Spring实现,因为它更容易集成。下面是我用于Flash Map实现的不同堆栈溢出的示例。它使用OncePerRequestFilter,因此将调用此过滤器的每个请求。如果您希望使用此过滤器类型,我建议将这些值存储在Session中,这样它们只执行一次,然后只在每个请求中检索,从而节省了一些处理时间。

https://github.com/donkeystalk/floor41/blob/master/floor-41/src/main/java/octane/floor/filters/FlashMapFilter.java

希望这有帮助。

答案 1 :(得分:0)

Spring Interceptor解决了这个问题(例如:http://dzone.com/tutorials/java/spring/spring-interceptor.html