Как выполнить итерацию один за другим в Thymeleaf- Spring — Boot?

#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> . Проведите несколько тестов и при необходимости задайте новый вопрос, иначе он превратится в вопросы внутри вопроса…