2017-02-08 5 views
1

Я пытаюсь включить один и тот же бит html на различные страницы. Этот шаблон представляет собой таблицу, которая отображает данные из базы данных. Я знаю, что у Thymeleaf есть фрагменты, но насколько я могу судить, я не могу включить фрагмент с собственным контроллером, который понадобится моему шаблону, чтобы он мог получить необходимые данные.Thymeleaf включает шаблон с собственным контроллером

Я видел this question, но этот шаблон можно назвать несколько раз на одной странице и добавить, что многие атрибуты Модели не кажутся правильным решением (не говоря уже о том, что имена атрибутов должны быть уникальными).

Есть ли способ включить этот шаблон в Thymeleaf, поэтому он имеет свой собственный контроллер отдельно от страницы, в которую он также включен.

ответ

0

Нет, это просто невозможно использовать только тимелеаф. Один контроллер на страницу.

Есть альтернативы простому добавлению всех ваших атрибутов. Вы можете поместить коллекцию в модель - либо Список, либо карту - и добавить свой индекс фрагментов в это, чтобы получить свои данные. (Вы можете передать аргументы фрагменту.)

Это или решение для javascript.

1

Я использую подход, который я называю «Сервис рендеринг» :)

Идея заключается в привлечении на интеграции пружинные бобы через @someService.

Вместо заполнения Model вы можете вызывать любой bean-компонент с параметрами, исходящими из модели, requestmapping, шаблона или фрагмента или из любого места, где вы можете их получить.

Маленький пример:

<div th:each="someVar : ${@someService.getData(someParameter)}" th:text="${someVar}">Template Text</div> 
+0

Хотя это возможно (и может быть решением, которое вы ищете), я думаю, что делать это плохая идея в целом. Он нарушает принципы MVC (игнорируя модель/контроллер) и сделает ваш код сложнее поддерживать и отлаживать. – Metroids

+0

@ Metroids: Я не согласен. Я считаю, что это еще проще поддерживать, так как вы можете создавать «повторно используемые компоненты». Я не говорю о бизнес-сервисах, а скорее о сервисах компонентов. «Компонент» - расширяемая аннотация, поэтому вы можете построить, как в моем случае, «UIService», живущий в контексте servlet. Модель IS - это список результатов/сущностей, а фрагмент - это представление. Если вам нравится, я могу отредактировать ответ на примере. –