HTML - шаблон ThymeLeaf:
<form th:action = "@{/gustos}" method = "post" th:object = "${gusto}">
<div class = "col s12 l8">
<select th:field = "*{categoria}">
<option value = "" disabled = "disabled">Categoria</option>
<option value = "Dulces de Leche">Dulce de Leche</option>
<option value = "Cremas">Cremas</option>
<option value = "Chocolates">Chocolates</option>
<option value = "Frutales">Frutales</option>
</select>
</div>
</form>
Это мои атрибуты класса Java Смак:
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Column
private int idCategoria;
@Column
private String categoria;
@Column // opcional (name = "")
private String nombre;
Мне нужно, чтобы значение int idCategoria в моем классе Смак принимало значение 1, если первый вариант (Dulce de Leche) выбран пользователем, 2 для второго, 3 для третьего и 4 для четвертого, но я не знаю, как это сделать с ThymeLeaf !! Эта логика основана на атрибуте категория, если категория соответствует определенному имени, тогда идентификатор категории будет определенным числом ... ПРИМЕР: если категория равна «Dulces de Leche», идентификатор категории должен быть «1» !!!
¡Обратите внимание, что я использую привязку объекта в верхней части формы!
Я пробовал это:
<div th:field = "*{idCategoria}">
<div th:switch = "*{categoria}">
<input type = "hidden" th:case = "'Dulces de Leche'" value = "1" />
<input type = "hidden" th:case = "'Cremas'" value = "2" />
<input type = "hidden" th:case = "'Chocolates'" value = "3" />
<input type = "hidden" th:case = "'Frutales'" value = "4" />
</div>
</div>
но это не работает !!! Я хочу сделать логику в шаблоне !!
Как я могу это сделать ?
Большое спасибо всем <3




Попробуйте это:
<select th:field = "*{categoria}">
<option th:value = "" disabled = "disabled">Categoria</option>
<option th:value = "1" th:text = "Dulces de Leche"></option>
<option th:value = "2" th:text = "Cremas"></option>
<option th:value = "3" th:text = "Chocolates"></option>
<option th:value = "4" th:text = "Frutales"></option>
</select>
Таким образом, когда вы получаете значения через свой бэкэнд, это будет 1, 2 или 3
Может быть, я не ясно выражаюсь ... извините :( Мне нужно, чтобы то, что вы указали как th: text, было привязано к другому атрибуту из моего объекта Gusto (в данном случае это атрибут "categoryoria"). Это работает нормально! Что мне нужно, так это указать ДРУГОЕ значение, значения 1, 2, 3 и 4 для атрибута idCategoria .... Могу ли я передать более одного значения в поле th :? value и bing первый параметр с первым th: value и второй параметр со вторым th: value ??
Может как то так ??? <select th: field = "* {category, idCategoria}"> <option value = "" disabled = "disabled"> Категория </option> <option th: value = "Dulces de Leche" th: value = "1" > Dulce de Leche </option> <option th: value = "Cremas" th: value = "2"> Кремы </option> <option th: value = "Chocolates" th: value = "3"> Конфеты </ option> <option th: value = "Frutales" th: value = "4"> Frutales </option> </select>
Вы не можете передать более одного значения опции (потому что она называется опцией). Вы можете обойти это, используя некоторую логику в своем классе java. Попробуйте использовать ЗАЯВЛЕНИЯ ЕСЛИ, например, htis ==> Если значение равно Dulces de Leche, создайте новую переменную и присвойте ей значение, равное единице ....
!!! Почему это не работает ?? <input type = "hidden" th: field = "* {idCategoria}" th: if = "* {category == 'Dulces de Leche'}" th: value = "1" /> Мне действительно нужно сделать это в шаблон листа
Ни это: <div th: field = "* {idCategoria}"> <div th: switch = "* {category}"> <input type = "hidden" th: case = "'Dulces de Leche'" value = " 1 "/> <input type = " hidden "th: case = " 'Cremas' "value = " 2 "/> <input type = " hidden "th: case = " 'Chocolates' "value = " 3 "/> <input type = "hidden" th: case = "'Frutales'" value = "4" /> </div> </div>
Просто используйте java для получения значений и проверьте, равно ли значение - например, Dulces de Leche - инициируйте новую переменную String со значением 1 и так далее ...
Это не так просто, потому что я использую Spring! Вот почему я хочу сделать это в шаблоне ... не знаю, где разместить логику для этого в Spring: /
Что у вас есть в вашем Spring Controller?
@RequestMapping (value = "gustos / add") public String formNewGusto (Модель модели) {model.addAttribute ("gusto", new Gusto ()); вернуть «форму»; }
Это метод, который возвращает представление для формы
Для этого можно использовать jQuery. Просто создайте новый скрытый ввод с отсутствующим полем. Ваш код будет выглядеть следующим образом.
Сначала изменится ваш новый ввод и выбор категории
<input id = "id" th:field = "*{id}" hidden = "hidden"/>
<select id = "categorias" th:field = "*{categoria}">
<option value = "" disabled = "disabled">Categoria</option>
<option value = "Dulces de Leche">Dulce de Leche</option>
<option value = "Cremas">Cremas</option>
<option value = "Chocolates">Chocolates</option>
<option value = "Frutales">Frutales</option>
</select>
Теперь ваш jQuery
$('#categorias').on('change', function() {
var value = $(this).val();
if (value === "Dulce de Leche") {
$('#id').val(1);
}
// Now you just fill the rest.
})
Итак, теперь, каждый раз, когда вы меняете категорию, вы будете добавлять новое значение к идентификатору. Надеюсь, это поможет! Если вам еще что-нибудь понадобится, дайте мне знать.
Спасибо Алене !!! Эта логика кажется хорошей, я не знаю, почему я получаю lang.IllegalArgumentException: не удается установить int field com.uces.CopitoDeNieve.model.Gusto.idCategoria в нулевое значение ----> ошибка сообщения
Это потому, что мы устанавливаем для null значение int, которое является примитивом. Вы получаете это после отправки формы или при парсинге? Если вы получаете его при отправке, вы можете добавить th:value=0 во ввод идентификатора. Конечно, потом вам нужно будет проверить, что ваш идентификатор не равен 0.
Да, я получаю его после отправки ... Сейчас попробую с этим вариантом!
Мое последнее исправление позволит избежать только lang.IllegalArgumentException, но вы по-прежнему не получаете правильного значения. Это означает, что мы не устанавливаем правильное значение в нашем jquery. В своем ответе допустил опечатку, вместо Dulces de Leche написал Дульсе де Лече. Это могло вызвать проблемы.
По-прежнему null ... даже с добавлением S в Dulces de Leche ... это становится странным :(
Оппс меняет *{id} на *{idCategoria}. Только что понял, что использовал неправильное поле.
Я изменил его раньше, потому что увидел ошибку, но все равно ноль
<div class = "col s12 l8"> <input id = "id" th: value = "0" th: field = "* {idCategoria}" hidden = "hidden" /> <select id = "categoryorias" th: field = "* {category}"> <option value = "" disabled = "disabled"> Категория </option> <option value = "Dulces de Leche"> Dulce de Leche </option> <option value = "Cremas" > Кремы </option> <option value = "Chocolates"> Шоколадные конфеты </option> <option value = "Frutales"> Frutales </option> </select> </div>
Вы не возражаете добавить свой метод контроллера? Я хочу проверить, как вы делаете привязку.
Это метод, который обрабатывает представление @RequestMapping (value = "gustos / add") public String formNewGusto (Model model) {model.addAttribute ("gusto", new Gusto ()); вернуть «форму»; }
Хорошо, это тот, который вы используете для загрузки страницы. Я имею в виду ту, куда вы отправляете свой пост. Тот, который сопоставлен с /gustos, должен иметь тип POST.
Извините :) @RequestMapping (value = "/ gustos", method = RequestMethod.POST) public String addGusto (Gusto gusto) {gustoService.save (gusto); вернуть "redirect: / gustos"}
Самое безумное, что другие поля работают нормально ... они отображаются в БД, как и ожидалось, но не это :(
Что ж, это не должно иметь значения, но давайте посмотрим, работает ли это. Измените его на следующее. @RequestMapping(value = "/gustos", method = RequestMethod.POST) public String addGusto(@ModelAttribute("gusto") Gusto gusto){ gustoService.save(gusto); return "redirect:/gustos" }. Да, это странно, так как вы даже добавляете к нему значение по умолчанию.
Спасибо за ответ ... Для этого мне все еще нужны значения th: field = "* {category}" !!! Есть ли способ получить два значения из поля th: и привязать их к разным атрибутам?