Шаблон проектирования SpringFramework & Tiles для нескольких контроллеров

Я новичок в плитках, и мне это нравится.

Моя проблема в том, что я получил плитку head , body и footer в определении шаблона в SpringFramework. Я хотел бы отобразить некоторую информацию о пользователе в заглавной плитке и отобразить последний IP-адрес входа в нижний колонтитул с некоторыми динамическими данными. Я имею в виду, что я могу это сделать, если я назначу (addAttribute) каждую переменную в каждом контроллере, который использует этот шаблон.

Есть ли способ, которым плитка верхнего/нижнего колонтитула запрашивает данные у собственного Spring Controller? Или как я могу добавить информацию (variableValue) в плитки верхнего и нижнего колонтитула без повторения исходного кода в каждом контроллере.

Спасибо


person Barnabas    schedule 28.09.2012    source источник


Ответы (2)


Это можно сделать несколькими способами, но один из них может заключаться в использовании фильтра.

В вашем 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, поэтому при каждом запросе будет вызываться этот фильтр. Если вы хотите использовать этот тип фильтра, я бы рекомендовал хранить эти значения в сеансе, чтобы они выполнялись только один раз, а затем просто извлекались при каждом запросе, что экономит время обработки.

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

Надеюсь это поможет.

person dardo    schedule 28.09.2012
comment
Spring Interceptor решает эту проблему (пример: dzone.com/tutorials/java/spring /spring-interceptor.html) - person Barnabas; 26.04.2013
comment
Либо работает =) В более новых версиях Spring это встроено за счет использования RedirectAttributes static.springsource.org/spring/docs/3.1.x/javadoc-api/org/ - person dardo; 26.04.2013

Spring Interceptor решает эту проблему (пример: http://dzone.com/tutorials/java/spring/spring-interceptor.html)

person Barnabas    schedule 26.04.2013