Как разобрать поле связанного объекта для int в HTML, используя ThymeLeaf? - PullRequest
0 голосов
/ 29 октября 2018
<form th:action="@{/gustos}" method="post" th:object="${gusto}">
    <input type="hidden" th:field="*{id}"/>
    <div class="row">
        <div class="col s12">
            <h2> Borrar Gusto</h2>
        </div>
    </div>
</form>

Я использую связанный объект th: object = "$ {gusto}" для доступа к каждому из атрибутов объекта в HTML.

Скрытый ввод, который захватывает идентификатор, разбирает его на строку ... Мне нужно проанализировать его еще раз, чтобы я мог получить доступ к переменной из моего контроллера или сделать следующее:

<div class="row delete" th:id="*{gusto.id != null}">
        <div class="col s12 l8">
            <form th:action="@{|/gustos/${gusto.id}/delete|}" method="post">
                <button type="submit" class="button">Borrar</button>
            </form>
        </div>
    </div>

Но это не позволяет мне увидеть, что поле является строкой, и оно ожидает int.

Есть ли способ проанализировать это поле ('id') в HTML, используя ThymeLeaf?

Это метод моего контроллера, который обрабатывает представление:

@RequestMapping(value = "/gustos/{id}/delete", method = RequestMethod.POST)
public String deleteGustoId(@PathVariable int id, Model model){
    Gusto gusto = gustoService.findGustoById(id);
    model.addAttribute("gusto", gusto);
    gustoService.delete(gusto);
    return "deleteGusto";
}

1 Ответ

0 голосов
/ 29 октября 2018

Я считаю, что проблема на вашем th:action. Вы используете синтаксис, который я не видел или не использовал, поэтому я не уверен, должен ли он работать. Я не использовал этот другой синтаксический способ, который всегда работал. Попробуйте изменить свой код следующим.

<form th:action="@{'/gustos/'+ ${gusto.id} +'/delete'}" method="post">
    <button type="submit" class="button">Borrar</button>
</form>

Обновление

Поскольку мы получаем String, мы можем выполнить простое приведение в нашем контроллере. Это если мы уверены, что параметр, который мы получаем, это int.

@RequestMapping(value = "/gustos/{id}/delete", method = RequestMethod.POST)
public String deleteGustoId(@PathVariable String id, Model model){
    int numId = Integer.parseInt(id);
    Gusto gusto = gustoService.findGustoById(numId);
    model.addAttribute("gusto", gusto);
    gustoService.delete(gusto);
    return "deleteGusto";
}

Странно то, что Spring должен автоматически выполнять кастинг за вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...