#javascript #java #spring-boot #thymeleaf
#javascript #java #spring-boot #thymeleaf
Вопрос:
Как мы можем выполнить итерацию списка на странице Thymeleaf? Предположим, у меня есть список, содержащий объект
Я могу отображать всю информацию о пользователе одну за другой на странице Thymeleaf, но на самом деле это то, что я не хочу реализовывать. Есть ли какой-нибудь способ, чтобы я мог отображать по одному пользователю за раз, и на следующей кнопке будет две кнопки, нажмите кнопку перейти к следующему доступному пользователю и отобразить информацию и скрыть информацию о предыдущем пользователе, а при нажатии предыдущей кнопки вернуться к предыдущей. Поскольку у меня более 20 или даже иногда более 50 пользователей информации.
public class Info {
private String name;
private String dob;
private String university;
// constructor , getter and setter
}
мой класс контроллера
@GetMapping("/get/All-user-info")
public String getAllUserInfo(Model model){
List<Info> info = new ArrayList<>();
info.add(new Info("NA","22/02/2020","Florida"));
info.add(new Info("PA","22/01/2020","Florida"));
info.add(new Info("CA","22/03/2020","Florida"));
info.add(new Info("DA","22/04/2020","Florida"));
model.addAttribute("info",info);
return "page-thyme";
}
моя страница Thymeleaf выглядит так. Он отображает все за один раз. Я действительно не понимаю, что здесь делать.
<div th:each="info, status : ${info}">
<p th:text="${info.name}">
<p th:text="${info.dob}">
<p th:text="${info.university}">
</div>
Редактировать:
Я добавил класс обслуживания
@GetMapping("/get/All-user-info/{departmentId}")
public String getAllUserInfo(Model model, @PathVariable String departmentId){
List<Info> info = userService.getUser(departmentId);
model.addAttribute("info",info);
return "page-thyme";
}
Комментарии:
1. Я не думаю, что это вопрос Thymeleaf как таковой — я думаю, что это скорее «как реализовать разбивку на страницы в Spring Boot? вопрос. Thymeleaf может поддерживать решения для разбивки на страницы, но не предоставляет таких решений. Я думаю, что исследование «разбивки на страницы Spring Boot» может быть хорошим началом.
Ответ №1:
Вы можете передать индекс объекта в параметре вашего контроллера следующим образом:
@GetMapping (path = "/modal")
public String modal(Model model, @RequestParam(name = "page", defaultValue = "0") int page) {
List<Info> info = new ArrayList<>();
info.add(new Info("NA","22/02/2020","Florida"));
info.add(new Info("PA","22/01/2020","Florida"));
info.add(new Info("CA","22/03/2020","Florida"));
info.add(new Info("DA","22/04/2020","Florida"));
model.addAttribute("info",info);
model.addAttribute("index",page);
return "modal";
}
и добавьте своего рода нумерацию страниц на вашей HTML-странице:
<div >
<p th:text="${info[__${index}__].name}">
<p th:text="${info[__${index}__].dob}">
<p th:text="${info[__${index}__].university}">
<div th:each="info, status : ${info}"><a th:text="${status.index}" th:href="@{modal(page=${status.index})}"></a></div>
</div>
Комментарии:
1. спасибо Xtof, но у меня есть вопрос предположим, у меня есть
info
список, который будет поступать из уже развернутого rest API, поэтому каждый раз, когда ему приходится взаимодействовать со своим API, я думаю, что это неправильный подход, что вы говорите? Можете ли вы объяснить, что это значит,[__${x}__]
поскольку я очень новичок в этом.2. Привет @Xtof, я только что внес дополнительные изменения в вопрос, пожалуйста, посмотрите, можете ли вы помочь. Есть ли способ, которым я могу использовать весь список за один раз и повторить его только в Thymeleaf
3. @AyushKangar —
__${x}__
это синтаксис предварительной обработки Thymeleaf.4. @AyushKangar — Вы прокомментировали: каждый раз, когда он должен взаимодействовать со своим API — да, он должен был бы это делать. Thymeleaf не может самостоятельно обрабатывать подкачку страниц, инициируемую пользователем на стороне клиента. Это не тот тип инструмента. Хорошей новостью является то, что вы используете Spring, а Spring обеспечивает поддержку подкачки.
5. Привет @AyushKangar, ответы на ваши вопросы были даны Эндрю Джеймсом. Просто дополнительный комментарий, если вы хотите использовать разбивку на страницы с помощью Spring: ваш возвращаемый тип в вашем контроллере будет Page<Info> вместо List<Info> . Проведите несколько тестов и при необходимости задайте новый вопрос, иначе он превратится в вопросы внутри вопроса…