@turdubekov
Студент

Как правильно присвоить значение объекту в thymleaf?

У меня есть HTML - форма , в которой есть options (select box) для поле categoryName Объекта Product. Значение для options берутся из объекта Category и должны присвоеваться в поле categoryName Объекта Product,
Но это не происходит, в чем может быть проблема?

html:
<form action="#" th:action="@{/save}" th:object="${product}" method="post">
        <table border="0" cellpadding="10">
            <tr>
                <td>Наименования:</td>
                <td><input required type="text" th:field="*{name}"/></td>
            </tr>
            <tr>
                <td>Описание:</td>
                <td><input required type="text" th:field="*{description}"/>

                </td>
            </tr>
            <tr>
                <td>Категория:</td>
                <td>
                    <input required type="text" th:field="*{category}"/>

                    <!-- Проблема! значение из option не происвается в product-->
                    <select class="form-select form-select-sm" aria-label=".form-select-sm example">
                        <option selected>Выберите котегорию</option>
                        <option th:each="category : ${categoryList}" value="${category.id}"
                                th:text="${product.category}"></option>
                    </select>

                </td>
            </tr>
            <tr>
                <td>Цена:</td>
                <td><input required type="number" th:field="*{price}" pattern='[0-9]+(\\.[0-9][0-9]?)?'/></td>
            </tr>
            <tr>
                <td colspan="2">
                    <button type="submit" class="btn btn-primary">Сохранить</button>
                </td>
            </tr>
        </table>
    </form>


Контроллер:
// добавить продукт
	@RequestMapping("/new_product")
	public String showNewProductForm(Model model) {
		Product product = new Product();
		List<Category> category = categoryService.getAll();
		model.addAttribute("categoryList", category);
		model.addAttribute("product", product);

		return "new_product";
	}
  • Вопрос задан
  • 451 просмотр
Решения вопроса 1
azerphoenix
@azerphoenix Куратор тега Java
Java Software Engineer
Добрый день.
Во-первых, убедитесь в том, что указанная строка что-то возвращает. Добавьте точку остановки и гляньте есть ли список категорий
List<Category> category = categoryService.getAll();


Точно не уверен, но могут ли названия двух полей, как-то конфликтовать?! Надо бы этот момент проверить.
th:field="*{category}"
Попробуйте в блоке ниже сменить category : на что-нибудь другое. Например, cat и соответственно, смените его в соответствующих строках тоже.
<option th:each="category : ${categoryList}" value="${category.id}"
                                th:text="${product.category}"></option>



Вы имеете ввиду вот, тут не присваивается? th:text="${product.category}"
Если да, то он и не будет присвоен, ибо в данном случае вы лишь получаете значение product.category, а так как product новый: Product product = new Product();, то и присвоенной категории для него тоже не будет.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы