Как использовать радиокнопку ввода с тимилефом и Spring MVC - PullRequest
0 голосов
/ 28 декабря 2018

Я хотел бы получить адрес получателя из списка переключателей ввода.Класс DestinationAddress имеет следующий вид:

public class DestinationAddress {

    private Integer destinationAddressId;

    private String name;

    private Location location;

    private User owner;


    public DestinationAddress(String name, Location location, User owner) {
        this.name = name;
        this.location = location;
        this.owner = owner;
    }

    public DestinationAddress() {
    }
// getter and setter

}

Контроллер, обрабатывающий получение и публикацию, выглядит следующим образом:

@PreAuthorize("hasRole('USER')")
    @GetMapping(value = "/select-address")
    public String selectAddress(Principal principal, Model model) {
        List<DestinationAddress> addresses = destinationAddressService.getAllByUsername(principal.getName());
        model.addAttribute("destinationAddresses", addresses);
        model.addAttribute("destinationAddress", new DestinationAddress());
        return "purchase/select-address";
    }


    @PreAuthorize("hasRole('USER')")
    @PostMapping(value = "/select-address")
    public String selectAddress(@ModelAttribute DestinationAddress destinationAddress, Principal principal) {
        Purchase purchase = purchaseService.addPurchase(principal.getName(), destinationAddress);
        return "redirect:/purchases/pay/" + purchase.getPurchaseId();
    }

И HTML-страница имеет следующий вид:

<form th:object="${destinationAddress}" method="post">
    <fieldset>
    <legend>Your addresses</legend>
    <ul>
        <li th:each="destinationAddress : ${destinationAddresses}">
            <input type="radio" th:field="*{destinationAddressId}" th:value="${destinationAddress.destinationAddressId}" />
            <label th:for="${#ids.prev('destinationAddress.destinationAddressId')}" th:text="${destinationAddress}"></label>
        </li>
    </ul>
</fieldset>
<p><input type="submit" value="Submit" /> <input type="reset" value="Reset" /></p>
</form>

Сообщение об ошибке следующее:

java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'destinationAddressId' available as request attribute

Я не знаю, в чем здесь проблема.Я не знаю, какой тип форма возвратит контроллеру.Так что я не знаю, какую переменную передать в модель, а какую получить из метода пост-контроллера.Целое число или адрес назначения?Я не могу найти что-то, гуглящее это, только маленькие кусочки кода без каких-либо объяснений.Какие-либо предложения?

1 Ответ

0 голосов
/ 28 декабря 2018

Я нашел решение своей проблемы.Я изменил html-страницу, теперь она выглядит следующим образом:

<form th:object="${address}" method="post">
    <fieldset>
        <legend>Your addresses</legend>
        <ul>
            <li th:each="destinationAddress : ${destinationAddresses}">
                <input type="radio" th:field="${address.destinationAddressId}" th:value="${destinationAddress.destinationAddressId}" />
                <label th:for="${destinationAddress.destinationAddressId}" th:text="${destinationAddress}"></label>
            </li>
        </ul>
    </fieldset>
    <p><input type="submit" value="Submit" /> <input type="reset" value="Reset" /></p>
</form>

Я изменил имя объекта внутри модели, потому что оно совпадает с именем временного пункта назначения Адреса цикла.Я также заменил «{# ids.prev (», потому что он выдавал ошибку:

Cannot obtain previous ID count for ID ...

Теперь все работает нормально.

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