将对象传递给 Thymeleaf 片段

时间:2021-02-06 21:47:34

标签: spring fragment thymeleaf

我正在尝试实现一个包含表单的 Thymeleaf 片段,但在传递 th:object 值时遇到问题。

片段:

    <div th:fragment="editCard(colSize, title, formObject, formAction, fields)"  th:class="${'col-lg-' + colSize}">
    <div class="card">
        <div class="card-header d-flex align-items-center">
            <h4 th:text="${title}"></h4>
        </div>
        <div class="card-body">
            <form th:object="${__${formObject}__}" th:action="${formAction}" method="post" class="form-horizontal">
                <div th:replace="${fields}"></div>
            </form>
        </div>
    </div>
</div>

和调用:

                <div th:replace="fragments/cards2 :: editCard(colSize='12', title='Concert', formObject=${concert}, formAction='/concert/save', fields=~{ :: .fields})" >
                <div class="fields">
                    <input type="hidden" th:field="*{id}"/>
                    <!--/*/ <th:block th:include="fragments/elements :: editSelect(label='Season', val='x', field='season', selectList='${seasons}', itemText='${item}', autofocus='autofocus')"></th:block> /*/-->
                    <!--/*/ <th:block th:include="fragments/elements :: editText(label='Title', val='x', field='title', autofocus='')"></th:block> /*/-->
                    <!--/*/ <th:block th:include="fragments/elements :: editCheckbox(label='Tour', field='tour')"></th:block> /*/-->

                </div>
            </div>
        </div>

Thymeleaf 和 Spring 绑定之间似乎存在交互,导致 formObject 无法准确传递。我不确定调用者和片段之间的哪个 Thymeleaf 语法​​组合是正确的。

1 个答案:

答案 0 :(得分:0)

在这种情况下,您应该传递字符串 'concert' 而不是对象。这有点奇怪,但它应该适合你。

<div th:replace="fragments/cards2 :: editCard(colSize='12', title='Concert', formObject='concert', formAction='/concert/save', fields=~{ :: .fields})" >

其余保持不变。您真正想要的是表达式 th:object="${__${formObject}__}" 的计算结果为 th:object="${concert}" (传递字符串即可)。现在它正在评估一些奇怪的东西,比如 th:object="${java.class.whatever@123412}"toString 的默认 ${concert})。

相关问题