Как поместить данные сервера для работы в модальном / всплывающем окне в thymeleaf (java)

#javascript #java #jquery #spring-mvc #thymeleaf

#javascript #java #jquery #spring-mvc #thymeleaf

Вопрос:

Я не могу понять одну вещь.

Мой случай: у меня есть VacationRequests как объект в серверной части (BE).

 @Data
public class Request {

@Id
private String id;
private LocalDateTime requestedAt;
private LocalDateTime decisionDate;
private RequestType type;
private RequestStatus status;

private String userId;
private String userFirstName;
private String userLastName;
private LocalDate from;
private LocalDate to;
}
 

Я отправляю его во внешний интерфейс (FE) и показываю все запросы на отпуск в таблице (данные из каждого запроса из myActiveRequests списка). Пользователь может обновить запрос на отпуск, если это необходимо.

Код:

   <tbody>
    <tr th:each="request,iter: ${myActiveRequests}">
      <td th:text="${iter.count}" />
      <td th:text="${request.getType()}" />
      <td>
        From:<span th:text="${#temporals.format(request.from, 'dd-MM-yyyy')}"/>
        to: <span th:text="${request.to}"/>
      </td>
      <td th:text="${#temporals.format(request.requestedAt, 'dd-MM-yyyy')}" />
      <td th:text="${request.status.PLANNED.toString()}"/>
      <td><button th:value="${request.id}" data-toggle="modal" data-target="#vacationModal" onclick="updateVacation()">Edit</button></td>
    </tr>
 </tbody>
 

В третьем <td> у меня есть данные об отпуске от и до. Как вы видите, у меня есть EDIT кнопка. Поэтому, если пользователь решил изменить свой запрос, я хочу, чтобы он видел всплывающее окно с предопределенными «от» и «до» с третьего <td> .
Я создал функцию updateVacation , которая вызывается после нажатия на Edit кнопку, но я не понимаю, как отправить в эту функцию запрос id (да, у него есть это свойство) from и to значение.
в этом случае у меня будет возможность создать ajax post-вызов для BE и обновить существующий запрос на отпуск по идентификатору.

Я думал поместить атрибут id в html, но было бы 1-2-3-10 запросов, поэтому id не имеет значения.

Я парень, а не FE, так что извините, если это слишком странные вопросы. Просто ткни меня носом в это, и я буду счастлив.

Комментарии:

1. Я не фанат встроенного кода, но быстрое решение этой проблемы — сделать onclick="updateVacation(this)" и использовать function updateVacation(btn) { ... } . Теперь вы можете прочитать btn.value , чтобы получить идентификатор.

2. Я думал об этом. Но updateVacation (this) просто пришлите мне <td> с помощью кнопки, я не могу получить значение from и to значение третьего td . и у меня нет идентификатора запроса, поэтому я не могу этого сделать.

3. Вы можете использовать const rowCells = btn.closest('tr').querySelectorAll('td'); для получения списка <td> s в той же строке, что и кнопка. Однако этот подход использует элементы DOM для хранения данных, что не является хорошей практикой. Я бы заполнил всплывающее окно, используя fetch и идентификатор для загрузки данных с сервера.