将一个物体传递成一个碎片

3pvhb19x  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(290)

我试图实现一个包含表单的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语法组合是正确的。

hsvhsicv

hsvhsicv1#

你应该把绳子传过去 '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} ).

相关问题