我使用自定义Thymeleaf属性处理器将动态内容包含到视图中,该属性处理器在处理属性本身时只添加其他节点。
我使用的代码与下面的代码非常相似:
final Template template = arguments.getTemplateRepository().getTemplate(
new TemplateProcessingParameters(arguments.getConfiguration(), "name-of-a-view", arguments.getContext()));
final List<Node> children = template.getDocument().getChildren();
// Add to the tree.
for (final Node node : children) {
element.addChild(node);
}
这样可以正常工作,但是当包含的节点包含使用th:object和th:field的表单时会中断。
我把我需要的模型放在节点变量map中,实际上th:object确实找到并检索了对象,但是:field似乎没有关心并打破了
Neither BindingResult nor plain target object for bean name 'model' available as request attribute
根据我的理解(逐步调试),在我看来,th:field仅在请求上下文中搜索模型。
我在这里错过了什么吗?
提前谢谢。
答案 0 :(得分:0)
不,你是现实。我仍然不确定为什么绑定不同于th:field而不是其他th:属性,但它肯定会有所不同。基本上,除非你的th:对象在模型上,否则你不能使用th:field。解决方法是停止使用th:字段并手动指定输入属性,如:
<form action="#" th:action="@{/process}" th:object="${objectFromList}" method="post">
<input type="text" id="fieldName" name="fieldName" th:value="*{fieldName}" />
</form>
我发现这篇文章很老了。希望这可以帮助那些遇到这个怪癖的人。