Thymeleaf-如何在表单中选择非空对象

时间:2018-10-23 11:41:03

标签: thymeleaf

尝试检查对象的形式是否不为空:

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

如果定义了loginInfo并且不为null,我想以loginInfo.account的形式使用。 否则,我想使用account对象。

该怎么做?

在上面的示例中,我得到IllegalStateException: Neither BindingResult nor plain target object for bean name 'loginInfo!= null ? loginInfo' available as request attribute

1 个答案:

答案 0 :(得分:0)

这就是我要做的。由于我们无法在th:object内添加条件,因此实现此目的的另一种方法是将th:blockth:if一起使用。当然,这意味着您需要在模板中输入表单的内容,否则将需要重复代码。我当然假设loginInfo.account与account具有相同的字段。

首先,让我们在layouts文件夹中创建模板。对于此示例,此html文件将称为form-inputs

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

现在,页面将具有以下代码来确定要使用哪个对象。如果loginInfo不为null,那么我们将使用它的帐户信息,否则,我们将使用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>

希望这对您有帮助!