我想在没有fragment
的情况下使用th:fragment
功能(仅使用id)。在我的代码中,要包含的目标片段是从迭代器动态构建的。问题是为th:include
创建正确表达式以正确呈现。我按照教程尝试了连接,预处理和文字替换,但没有结果 - 让我想到 - 这是th:include
允许的吗?
片段定义(它位于我的模板下名为Comments.html
的文件中,带有我的其他模板。)
<div id="LOW_SCORE_COMMENT">
它被这样称呼
<div class="well" th:each="commentFragment : ${allComments}">
<div th:include="'Comments :: #' + {__${commentFragment}__}">
</div>
</div>
allComments
是Iterator<String>
,检索到的字符串是片段ID,因此它应构建整个页面。
但是我得到了这个错误
org.thymeleaf.exceptions.TemplateInputException: Error resolving template "'Comments", template might not exist or might not be accessible by any of the configured Template Resolvers
注意&#34;之间的单引号和错误消息中的注释。
你有什么建议吗?
编辑: 我试过这段代码
<div class="well" th:each="commentFragment,iterstat : ${allComments}">
<div th:include="${commentFragment.getValue()}"></div>
基本上将allcomments
更改为TreeMap
以解决排序问题,但现在错误如下:
org.thymeleaf.exceptions.TemplateInputException:解析模板时出错 &#34;评论::#LOW_SCORE_COMMENT&#34;,模板可能不存在或者可能无法由任何已配置的模板解析器访问
答案 0 :(得分:2)
问题在于缺少预处理符号__
- 请参阅Thymeleaf documentation。没有__
的表达式只是按原样替换并传递给生成的HTML页面。
预处理是执行在正常表达式之前完成的表达式,允许修改最终将被执行的表达式。
预处理表达式与普通表达式完全相同,但显示为双下划线符号(如
__${expression}__
)。
正确的工作代码是:
<div class="well" th:each="commentFragment : ${allComments}">
<div th:include="__${commentFragment.getValue()}__"></div>
答案 1 :(得分:0)
这应该使用片段表达式来工作,如here
所述<div class="well" th:each="commentFragment : ${allComments}">
<div th:include="~{Comments :: #__${commentFragment}__}">
</div>
</div>