В типичном приложении Spring MVC классы @Controller
отвечают за подготовку карты модели с данными и выбор вида для отображения. Эта model map
обеспечивает полную абстракцию технологии представления и, в случае Thymeleaf, она преобразуется в объект Thymeleaf VariablesMap
который делает все определенные переменные доступными для выражений, выполняемых в шаблонах.
Весенние модельные атрибуты
Spring MVC вызывает фрагменты данных, к которым можно получить доступ во время выполнения model attributes
. Эквивалентным термином в языке Thymeleaf являются context variables
. Существует несколько способов добавления атрибутов модели в представление в Spring MVC. Ниже вы найдете несколько распространенных случаев: Добавить атрибут в Model с помощью метода `addAttribute`:
1
2
3
4
5
|
@RequestMapping (value = "message" , method = RequestMethod.GET) public String messages(Model model) { model.addAttribute( "messages" , messageRepository.findAll()); return "message/list" ; } |
Вернуть `ModelAndView` с включенными атрибутами модели:
1
2
3
4
5
6
|
@RequestMapping (value = "message" , method = RequestMethod.GET) public ModelAndView messages() { ModelAndView mav = new ModelAndView( "message/list" ); mav.addObject( "messages" , messageRepository.findAll()); return mav; } |
Предоставьте общие атрибуты с помощью методов, аннотированных с помощью `@ ModelAttribute`:
1
2
3
4
|
@ModelAttribute ( "messages" ) public List<Message> messages() { return messageRepository.findAll(); } |
Как вы, возможно, заметили, во всех вышеупомянутых случаях атрибут `messages` добавляется в модель и будет доступен в представлениях Thymeleaf.
В Thymeleaf к этим атрибутам модели можно получить доступ со следующим синтаксисом: `$ {attributeName}`, который является выражением Spring EL.
Вы можете получить доступ к атрибутам модели в представлениях с помощью Thymeleaf следующим образом:
1
2
3
4
5
|
< tr th:each = "message : ${messages}" > < td th:text = "${message.id}" >1</ td > < td >< a href = "#" th:text = "${message.title}" >Title ...</ a ></ td > < td th:text = "${message.text}" >Text ...</ td > </ tr > |
Параметры запроса
Параметры запроса могут быть легко доступны в представлениях Thymeleaf. Параметры запроса передаются от клиента к серверу, например:
1
|
https: //example.com/query?q=Thymeleaf+Is+Great! |
Предположим, у нас есть `@ Controller`, который отправляет перенаправление с параметром запроса:
1
2
3
4
5
6
7
|
@Controller public class SomeController { @RequestMapping ( "/" ) public String redirect() { return "redirect:/query?q=Thymeleaf Is Great!" ; } } |
Для доступа к параметру `q` вы можете использовать префикс` param.`:
1
|
< p th:text = "${param.q[0]}" th:unless = "${param.q == null}" >Test</ p > |
В вышеприведенном примере важно отметить две вещи:
- `$ {param.q! = null}` проверяет, установлен ли параметр `q`
- Параметры всегда являются строковыми массивами, так как они могут быть многозначными (например, `https://example.com/query?q=Thymeleaf%20Is%20Great!&q=Really%3F)
Другой способ получить доступ к параметрам запроса — использовать специальный объект `# httpServletRequest`, который дает вам прямой доступ к объекту` javax.servlet.http.HttpServletRequest`:
1
|
< p th:text = "${#httpServletRequest.getParameter('q')}" th:unless = "${#httpServletRequest.getParameter('q') == null}" >Test</ p > |
Атрибуты сеанса
В приведенном ниже примере мы добавляем mySessionAttribute к сессии:
1
2
3
4
5
|
@RequestMapping ({ "/" }) String index(HttpSession session) { session.setAttribute( "mySessionAttribute" , "someValue" ); return "index" ; } |
Подобно параметрам запроса, к атрибутам сеанса можно получить доступ с помощью префикса `session.`:
1
|
< div th:text = "${session.mySessionAttribute}" >[...]</ div > |
Или используя `# httpSession`, это дает вам прямой доступ к объекту` javax.servlet.http.HttpSession`.
Атрибуты ServletContext, Spring bean
Полная версия этой статьи, которую я написал для thymeleaf.org , с большой помощью Даниэля Фернандеса, может быть найдена здесь: http://www.thymeleaf.org/springmvcaccessdata.html
Ссылка: | Spring MVC и Thymeleaf: как получить доступ к данным из шаблонов от нашего партнера по JCG Рафаля Боровца в блоге Codeleak.pl . |