我包含了来自同一个模板文件的模板片段。文档的“8.1包括模板片段-定义和引用片段”一节指出:
“::d omselector”或“this::d omselector” 包括来自同一模板的片段。
如果我没有误解,我应该能够如下引用片段:th: include="this:: contentB"
或th: include=":: contentB"
,但只做完整的引用th: include="test-fraance:: contentB"
对我有用。
这是示例代码:
HomeController.java
@Controller
class HomeController {
@RequestMapping({ "/", "index", "home" })
String index(Model model) {
return "test";
}
}
test.html
<!DOCTYPE html>
<html>
<head></head>
<body>
<ul th:replace="test-fragment :: contentA" />
</body>
</html>
test-fragment.html
<!DOCTYPE html>
<html>
<head></head>
<body>
<ul th:fragment="contentA">
<li th:each="idx : ${#numbers.sequence(1,4)}" th:switch="${idx}">
<th:block th:case="1"
th:include="test-fragment :: contentB"
th:with="strVar = 'One'"/>
<th:block th:case="2"
th:include="this :: contentB"
th:with="strVar = 'Two'"/>
<th:block th:case="3"
th:include=" :: contentB"
th:with="strVar = 'Three'"/>
<th:block th:case="*"
th:include="/test-fragment :: contentB"
th:with="strVar = 'Other'"/>
</li>
</ul>
<span th:fragment="contentB">
<span th:text="|value: ${strVar}|" />
</span>
</body>
</html>
输出是:
<!DOCTYPE html>
<html>
<head></head>
<body>
<ul>
<li><span>value: One</span></li>
<li></li>
<li></li>
<li><span>value: Other</span></li>
</ul>
</body>
</html>
缺少案例 2 和 3。我做错了什么?
我正在使用Spring Boot 1.3.2.RELEASE进行测试
编辑:
我做了一个小的测试项目来重现这个问题,它可以在这里找到:https://github.com/t-cst/thymeleaf-springboot-test
编辑:
经过一些调试,我发现当片段选择器是"this:: contentB"
或":: contentB"
时,模板名称被解析为test
而不是test-frament
。这是在以下位置完成的:
StandardFragment#extractFragment:189
来自thymeleaf-2.1.4.RELEASE:
/* 186 */ String targetTemplateName = getTemplateName();
if (targetTemplateName == null) {
if (context != null && context instanceof Arguments) {
targetTemplateName = ((Arguments)context).getTemplateName();
/* 190 */ } else {
throw new TemplateProcessingException(
"In order to extract fragment from current template (templateName == null), processing context " +
"must be a non-null instance of the Arguments class (but is: " +
(context == null? null : context.getClass().getName()) + ")");
/* 195 */ }
}
但我仍然不知道为什么在我的测试中会发生这种情况。
编辑:
我也在thymeleaf论坛上问过。也许这是一个错误。我已经打开了一个问题。
如果有人在这里以同样的问题结束,这在thymeleaf 2.1.4.RELEASE
版本中是不可能的,但它将在下一个版本3.0
中
可以在本期评论中找到全面的解释。
我正在通过解析器运行GraphQl变异。这是与Neo4j数据库的对比。该查询运行良好,但是我无法以在结果中显示的方式组织结果。我已经尝试了几种不同的结果和记录映射组合,但是我无法在输出中显示返回结果集的属性。 具体来说,在下面的示例中,您将看到响应中的name字段(通过GraphiQL)在我希望将其设置为返回值时为空。 解析器: GraphQL查询 输出: 相关架构部分
我不知道我的视图出了什么问题,但它不可能工作,即使设置正确,视图也总是出错。我不知道是否还有其他方法可以做到这一点,但胸腔总是失败。 错误是这样的- 这是我的控制器 我的观点
我有一个应用程序实体,其中包含一些参数,如CustomerName、Address和CardNumber。在用Jackson将其序列化为JSON时,我希望卡号被屏蔽。例如,如果CardNumber为1234567890134,我希望JSON的值为CardNumber:1234*******1234。所以我在Card Number属性上添加了@JsonSerialize注释,并使其使用我的自定义序列
我想在胸腺方言中使用胸腺方言,但不能。我尝试过这个,但效果不佳: of删除里面的所有内容。我想在渲染后得到这样的东西: 那么,我该如何实现我的目标呢?
我尝试使用ThymeLeaf处理模板,但我得到。 这是我的代码: 我试图通过添加这样的前缀来更改路径,但它没有帮助: 此错误可能是由路径问题以外的其他原因引起的吗? 如果需要,我可以给我的项目结构的更多细节。 谢谢 编辑: 这是堆栈跟踪,它可能会有所帮助:
我正在使用spring Roo并希望访问Controller类中的一个bean,该类在ApplicationContext.xml中具有以下配置: 配置类本身是: 在我的Controller中,我认为一个简单的Autowired注释应该可以完成这项工作 在启动过程中,spring在setSkipWeeks方法中打印消息。不幸的是,每当我在控制器中调用config.getSkipWeeks()时,它