Thymeleaf - как выбрать ненулевой объект в форме - PullRequest
0 голосов
/ 23 октября 2018

Попытка проверить, не является ли объект нулевым в форме:

<form th:action="@{register}" th:object="${loginInfo != null ? loginInfo.account : account}" method="post">
<input th:field="*{phoneNumber}"/>

Если loginInfo определено и не равно нулю, я хочу использовать loginInfo.account в форме.В противном случае я хочу использовать account объект.

Как это сделать?

В приведенном выше примере я получаю IllegalStateException: Neither BindingResult nor plain target object for bean name 'loginInfo!= null ? loginInfo' available as request attribute

1 Ответ

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

Вот что я бы сделал.Поскольку мы не можем добавить условные выражения внутри th:object, то единственный другой способ добиться этого - использовать th:block с th:if.Конечно, это будет означать, что вам нужны входные данные вашей формы в шаблоне, в противном случае вам придется дублировать код.Конечно, я предполагаю, что loginInfo.account имеет те же поля, что и account.

Во-первых, давайте создадим наш шаблон в нашей папке раскладок.В этом примере этот HTML-файл будет называться form-inputs.

<th:block th:fragment="form-inputs">
    <input th:field="*{phoneNumber}"/>
</th:block>

Теперь на странице будет следующий код, чтобы решить, какой объект использовать.Если loginInfo не равно нулю, мы будем использовать его учетную информацию, в противном случае мы будем использовать account.

<th:block th:if="${loginInfo!=null}">
    <form th:action="@{register}" th:object="${loginInfo.account}" method="post">
        <section th:replace="layouts/form-inputs :: form-inputs" th:remove="tag">
        </section>
    </form>
</th:block>
<th:block th:if="${loginInfo == null}">
    <form th:action="@{register}" th:object="${account}" method="post">
        <section th:replace="layouts/form-inputs :: form-inputs" th:remove="tag">
        </section>
    </form>
</th:block>

Надеюсь, это поможет вам!

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