我正在尝试实现一个包含表单的 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 语法组合是正确的。
答案 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}
)。