- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我面临这样一个场景,我需要处理一个 HTML 模板 (index.html),该模板是通过 Thymeleaf TemplateEngine 使用我的数据 POJO 从 ZIP 文件(通过 ZipInputStream)解压缩的。所以我现在拥有的是解压缩的模板文件的InputStream。我相信TemplateResolver将帮助我解决这个案子。
TemplateResolver 是一个通用实现,允许您指定自己的 IResourceResolver 实现,以您需要的方式获取输入流。您可以创建自己的资源解析器(实现 IResourceResolver)并将其设置为 TemplateResolver 实例。
如何完成这个任务?有什么见解吗?
// index.html is the byte[] here, 'resourceData'
InputStream fileinputStream = new ByteArrayInputStream(resourceData);
FileResourceResolver fileResourceResolver = new FileResourceResolver();
TemplateResolver resolver = new TemplateResolver();
resolver.setTemplateMode("XHTML");
resolver.setSuffix(".html");
resolver.setResourceResolver(fileResourceResolver);
TemplateEngine engine = new TemplateEngine();
engine.setTemplateResolver(resolver);
Context context = new Context(Locale.US);
context.setVariable("data", myDataPojo);
return engine.process("index", context);
最佳答案
我找到了方法:)希望任何面临同样问题的人都可以使用这个解决方案。
private static class CustomTemplateResolver implements IResourceResolver {
private InputStream inputStream;
private String templateName;
public CustomTemplateResolver(String templateName, InputStream inputStream) {
this.templateName = templateName;
this.inputStream = inputStream;
}
@Override
public String getName() {
return templateName;
}
@Override
public InputStream getResourceAsStream(TemplateProcessingParameters templateProcessingParameters, String resourceName) {
return inputStream;
}
}
测试类
@Test
public void createPdfFromZip() throws Exception {
String fileBundleZipFile = "sample.zip";
String templateFileName = "index";
String fileExt = ".html";
ClassPathResource resourceZip = new ClassPathResource(fileBundleZipFile);
ZipFile zipFile = new ZipFile(new File(this.getClass().getResource("/" + fileBundleZipFile).getFile()));
ZipInputStream zipInputStream = new ZipInputStream(resourceZip.getInputStream());
ZipEntry zipEntry = zipInputStream.getNextEntry();
while (zipEntry != null) {
if (zipEntry.getName().equals(templateFileName + fileExt)) {
TemplateResolver resolver = new TemplateResolver();
resolver.setTemplateMode("XHTML");
resolver.setSuffix(fileExt);
resolver.setResourceResolver(new CustomTemplateResolver(templateFileName, zipFile.getInputStream(zipEntry)));
MyPojo data= getData();
TemplateEngine engine = new TemplateEngine();
engine.setTemplateResolver(resolver);
Context context = new Context(Locale.US);
context.setVariable("data", data);
String dataHTMLString = engine.process(templateFileName, context);
Path tempFile = Files.createTempFile("unzipped-data-html", ".pdf");
createDataPdfWithCss(tempFile, dataHTMLString);
}
zipEntry = zipInputStream.getNextEntry();
}
zipInputStream.closeEntry();
zipInputStream.close();
}
关于Java - Thymeleaf - 如何在 TemplateEngine 中处理输入流? (独立模板),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53323313/
我正在构建一个 SpringBoot 应用程序,该应用程序从数据库加载国际化消息。(Followed this tutorial) 由此,我必须创建一个 ThymeleafConfiguration
我对 TemplateEngine 有疑问。 我有邮件模板解析器,它根据名称填充 thymeleaf 模板。当我不指定子目录时它效果很好。方法如下: private String getMailFro
我正在使用 spring 在 Java 中开发一个 Web 应用程序。 此应用程序包含 JavaScript 中的 Ajax 调用,该调用请求 html 代码,然后将其插入到 html 文档中。 为了
我使用 thymeleaf 模板引擎来构建对 SOAP 服务的请求。执行发送的类如下所示: import java.io.StringReader; import java.util.*; impor
这是我的代码,我用它来使用 java spring 和 thymeleaf 模板引擎发送 html 电子邮件。 @Service public class EmailServiceImpl imple
我面临这样一个场景,我需要处理一个 HTML 模板 (index.html),该模板是通过 Thymeleaf TemplateEngine 使用我的数据 POJO 从 ZIP 文件(通过 ZipIn
坦率地说,我正在寻找一个离线模板引擎,以使用 xpath 语法将来自 xml 数据库的信息应用到特殊的文本文件中。 我的文字不太好,举个例子更容易明确。所以我的db.xml好像: 和 f
我是一名优秀的程序员,十分优秀!