将对象传递到 Thymeleaf 片段中

Passing an object into a Thymeleaf fragment

我正在尝试实现包含表单的 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 语法​​组合到底是正确的。

在这种情况下,您应该传递字符串 '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}"${concert} 的默认 toString)。