【发布时间】:2020-12-27 01:58:50
【问题描述】:
最近我决定尝试使用 Spring MVC 学习 Thymeleaf。目前我正在存储 html 正文片段,例如 img、iframe 等。在使用带有 UTF-8 编码和西里尔符号的 thymeleaf 标签将这些 html 片段注入一个通用 html 页面后,问题就出现了。更准确地说,这些 html 片段来自 Spring 控制器的 Model 属性。是否可以仅将片段注入到一个通用 html 页面中,如下所示:
<html xmlns:th="https://www.thymeleaf.org">
<head></head>
<body>
[(${contents})] <!-- contents is that fragment I want to inject -->
</body>
</html>
Controller的请求方法如下图:
@GetMapping("/getArticle/{id}")
public String getArticle(@PathVariable Long id, Model model) throws IOException {
Article article = articleService.getById(id);
String contents = new String(Files.readAllBytes(Paths.get(article.getText())));
model.addAttribute("contents", contents);
return "news//article";
}
内容插入片段示例:
<h1>Кириллица</h1>
<br/><iframe style='width: 30%; height: 35%;' src='link'></iframe><br/>
Классный видос, да?
The result of combining 2 previous lists gives me this
正如我之前提到的,我遇到了一些问题,我有一些曲线符号而不是俄罗斯符号。另外,我应该注意,在没有注入的正常页面加载的情况下,所有的俄语符号都会正确显示。 Spring 配置中有我的 ViewResolver 和 TemplateResolver:
@Bean
public SpringResourceTemplateResolver templateResolver() {
SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver();
templateResolver.setApplicationContext(applicationContext);
templateResolver.setPrefix("/WEB-INF/views/");
templateResolver.setSuffix(".html");
templateResolver.setCharacterEncoding("UTF-8");
templateResolver.setTemplateMode(TemplateMode.HTML);
templateResolver.setCacheable(true);
return templateResolver;
}
@Bean
public ThymeleafViewResolver viewResolver() {
ThymeleafViewResolver thymeleafViewResolver = new ThymeleafViewResolver();
thymeleafViewResolver.setCharacterEncoding("UTF-8");
thymeleafViewResolver.setContentType("text/html; charset=UTF-8");
return thymeleafViewResolver;
}
那么,接下来的问题是:这是否可以直接注入从控制器接收的 html 代码作为属性,使用具有正确 UTF-8 编码且不带曲线符号的 thymeleaf 标签?
【问题讨论】:
标签: java spring spring-boot model-view-controller thymeleaf