Мне было интересно, можно ли сделать то: каждый с исключениями

Я имею в виду ... например ... у нас есть три состояния в нашей базе данных и модели {FREE, RESERVED, TAKEN} (Enum).

И я хотел бы сделать следующее: каждое из этих состояний, кроме одного (тот, который выбран в базе данных для конкретного объекта, я не хочу выбирать уже принятый вариант)

Есть ли что-то похожее на этот th: за исключением , который я только что придумал для этого примера?

<select>
<option th:each="i: ${state}" th:except="${i.RESERVED}" th:text="${i}" th:value="${i}" ></option>
</select>

Так что я мог бы использовать это в этом контексте:

<tr th:each="spot : ${spots}">
  <td th:text="${spot.name}" th:value="${spot.id}"></td>
  <td>
    <select>
      <option th:each="i: ${state}" th:except="${spot.i}" th:text="${i}" th:value="${i}" ></option>
    </select>
  </td>
<tr>

Я знаю, что, вероятно, мог бы сделать это в контроллере, но мне интересно, есть ли что-нибудь, что я могу использовать, чтобы сделать это очень быстро и легко!

Или даже «th: where», которое я могу поместить в тот же тег, что и th: each ....

0
Sandrituky 25 Ноя 2019 в 14:08

2 ответа

Для этой цели вы можете использовать th: if. Учитывая ваш пример:

<tr th:each="spot : ${spots}">
  <td th:text="${spot.name}" th:value="${spot.id}"></td>
  <td>
    <select>
      <option th:each="i: ${state}" th:unless="${spot == i}" th:text="${i}" th:value="${i}" ></option>
    </select>
  </td>
<tr>

Из вашего примера ${spot.i} неясно, что это за переменная, поэтому я предположил, что вы хотите сравнить значение spot с i.

0
Darkice 26 Ноя 2019 в 12:34

Упс, я решил это неделю назад и забыл прокомментировать, как я это сделал.

Это было намного проще, чем я думал, я не могу объяснить как, но Spring многое делает автоматически.

Это мой контроллер:

@GetMapping("/bajaAnimal")
public String pagBaja(Model model) {

    List<Spot> spotsList = repository.findAllSpotsByState(Status.RESERVED) //IF YOU FIND BY ONE STATUS, IT WILL EXCLUDE IT FROM OPTIONS!
    model.addAttribute("spots", spotsList);

    Status[] statusOptions = Status.values();
    model.addAttribute("statuses", statusOptions );

return "animales/bajaAnimal";
}

Мой HTML:

<th:block th:each="spot: ${spots}">
    <select class="form-control" th:name="selectEstado" th:id="selectEstado" required>
        <option value="" selected="selected">Change status</option>
        <th:block th:each="i : ${statuses}">
            <th:block th:if="${i != spot.status}">
                <option th:value="${i}" th:text="${i}"></option>
            </th:block>
        </th:block>
    </select>
</th:block>
0
Sandrituky 3 Дек 2019 в 18:32