首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >‘.’中的字段templateEngine需要一个无法找到的'org.thymeleaf.TemplateEngine‘类型的bean

‘.’中的字段templateEngine需要一个无法找到的'org.thymeleaf.TemplateEngine‘类型的bean
EN

Stack Overflow用户
提问于 2022-06-14 12:52:32
回答 2查看 376关注 0票数 0

因此,我试图从一个晶闸管模板生成一个pdf文件,但在运行我的应用程序时,我得到了这个错误。

代码语言:javascript
运行
复制
***************************
APPLICATION FAILED TO START
***************************

Description:

Field templateEngine in com.example.app.service.PdfService required a bean of type 'org.thymeleaf.TemplateEngine' that could not be found.

The injection point has the following annotations:
    - @org.springframework.beans.factory.annotation.Autowired(required=true)


Action:

Consider defining a bean of type 'org.thymeleaf.TemplateEngine' in your configuration.


Process finished with exit code 0

下面是我的应用程序的样子。一切看起来都是正确的,我不知道我做错了什么

我的配置文件:

代码语言:javascript
运行
复制
@Configuration
public class ThymeleafConfig {

    @Bean
    public ClassLoaderTemplateResolver templateResolver() {
        ClassLoaderTemplateResolver templateResolver = new ClassLoaderTemplateResolver();
        templateResolver.setPrefix("templates/");
        templateResolver.setTemplateMode("HTML5");
        templateResolver.setSuffix(".html");
        templateResolver.setTemplateMode("XHTML");
        templateResolver.setCharacterEncoding("UTF-8");
        templateResolver.setOrder(1);
        return templateResolver;
    }
}

我的PdfService:

代码语言:javascript
运行
复制
@Service
public class PdfService {

    @Autowired
    private TemplateEngine templateEngine;

    public void createPDF() throws DocumentException, IOException {
        Context context = new Context();
        context.setVariable("name","developper.com");
        String processHtml = templateEngine.process("helloworld",context);
        OutputStream outputStream = new FileOutputStream("message.pdf");
        ITextRenderer renderer = new ITextRenderer();
        renderer.setDocumentFromString(processHtml);
        renderer.layout();
        renderer.createPDF(outputStream,false);
        renderer.finishPDF();
        outputStream.close();
    }
}

我的主要应用程序:

代码语言:javascript
运行
复制
@Bean
    CommandLineRunner run(PdfService pdfService) {

        return args -> {

            System.out.println("creating pdf...");
            pdfService.createPDF();
            System.out.println("pdf creation complete!");
       
        };
    }

编辑:我设法克服了这个问题,但现在我遇到了另一个错误:

代码语言:javascript
运行
复制
java.lang.IllegalStateException: Failed to execute CommandLineRunner
    at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:772) ~[spring-boot-2.6.3.jar:2.6.3]
    at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:753) ~[spring-boot-2.6.3.jar:2.6.3]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:309) ~[spring-boot-2.6.3.jar:2.6.3]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1303) ~[spring-boot-2.6.3.jar:2.6.3]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1292) ~[spring-boot-2.6.3.jar:2.6.3]
    at com.example.app.AppApplication.main(AppApplication.java:35) ~[classes/:na]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
    at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na]
    at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49) ~[spring-boot-devtools-2.6.3.jar:2.6.3]
Caused by: org.xhtmlrenderer.util.XRRuntimeException: Can't load the XML resource (using TrAX transformer). org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; Content is not allowed in prolog.
    at org.xhtmlrenderer.resource.XMLResource$XMLResourceBuilder.transform(XMLResource.java:222) ~[flying-saucer-core-9.1.4.jar:na]
    at org.xhtmlrenderer.resource.XMLResource$XMLResourceBuilder.createXMLResource(XMLResource.java:181) ~[flying-saucer-core-9.1.4.jar:na]
    at org.xhtmlrenderer.resource.XMLResource.load(XMLResource.java:84) ~[flying-saucer-core-9.1.4.jar:na]
    at org.xhtmlrenderer.pdf.ITextRenderer.setDocumentFromString(ITextRenderer.java:161) ~[flying-saucer-pdf-itext5-9.1.4.jar:na]
    at org.xhtmlrenderer.pdf.ITextRenderer.setDocumentFromString(ITextRenderer.java:156) ~[flying-saucer-pdf-itext5-9.1.4.jar:na]
    at com.example.app.service.PdfService.createPDF(PdfService.java:28) ~[classes/:na]
    at com.example.app.AppApplication.lambda$run_again$1(AppApplication.java:74) ~[classes/:na]
    at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:769) ~[spring-boot-2.6.3.jar:2.6.3]
    ... 10 common frames omitted
Caused by: javax.xml.transform.TransformerException: org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; Content is not allowed in prolog.
    at java.xml/com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:794) ~[na:na]
    at java.xml/com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:397) ~[na:na]
    at org.xhtmlrenderer.resource.XMLResource$XMLResourceBuilder.transform(XMLResource.java:220) ~[flying-saucer-core-9.1.4.jar:na]
    ... 17 common frames omitted
Caused by: org.xml.sax.SAXParseException: Content is not allowed in prolog.
    at java.xml/com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1251) ~[na:na]
    at java.xml/com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transformIdentity(TransformerImpl.java:695) ~[na:na]
    at java.xml/com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:782) ~[na:na]
    ... 19 common frames omitted
EN

回答 2

Stack Overflow用户

发布于 2022-06-14 13:01:48

在configuration类中,您需要创建模板引擎bean并设置您创建的模板解析器:

代码语言:javascript
运行
复制
  @Bean
        public SpringTemplateEngine templateEngine() {
            var templateEngine = new SpringTemplateEngine();
            templateEngine.setTemplateResolver(templateResolver());
    
            return templateEngine;
        }

注意::TemplateEngine bean不是自动配置的。

票数 1
EN

Stack Overflow用户

发布于 2022-06-14 13:03:02

TemplateEngine不是自动配置的,因此您需要在配置中添加类似的内容(请记住设置TemplateResolver)。

代码语言:javascript
运行
复制
@Bean
public TemplateEngine templateEngine() {
  return new TemplateEngine(); 
}

或者,您也可以将其插入服务中,通过

代码语言:javascript
运行
复制
final TemplateEngine templateEngine = new TemplateEngine();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72617317

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档