当前位置: 首页 > 知识库问答 >
问题:

thymeleaf误差

窦夜洛
2023-03-14
@Component
class DbTemplateResolver extends TemplateResolver {
@Autowired 
SpringTemplateEngine templateEngine;
....othercode
@PostConstruct
    public void extension() {
        templateEngine.addTemplateResolver(this);
    }
...other code
}
@Component
class MessageFormatHelper{

@Autowired
  SpringTemplateEngine templateEngine;
... other code
String getMessage()
{
        final Context ctx = new Context(locale);
                ctx.setVariable("contractMap", model.get(ContractMap.TEMPLATE_MODEL_MAP_KEY));
                mergedMessage = templateEngine.process(fileName, ctx);
}

}

完全错误:

原因:org.springframework.beans.factory.beanCreationException:无法自动执行字段:private com.flex.eventmanagement.handler.helper.messageformanagement.handler.helper.notificationpreprocessor.messageformathelper;嵌套异常是org.springframework.beans.factory.beanCreationException:创建名为“Message ForMathelper”的bean时出错:注入autowired依赖项失败;嵌套的异常是org.springframework.beans.factory.beanCreationException:不能autowire字段:org.Thymeleaf.spring4.SpringTemplateEngine com.flex.EventManagement.handler.helper.MessageForMathelper.TemplateEngine;嵌套异常是org.springframework.beans.factory.beanCreationException:创建名为'org.springframework.boot.autoconfigure.Thymeleaf.ThymeleafautoConfiguration$ThymeleafDefaultConfiguration'的bean时出错:注入autowired依赖项失败;嵌套异常是org.springframework.beans.factory.beanCreationException:不能autowire字段:private final java.util.collection org.springframework.boot.autoconfigure.thymeleafafautoConfiguration$thymeleafdefaultconfiguration.templateresolvers;嵌套异常是org.springframework.beans.factory.beanCreationException:创建名为“DB TemplateResolver”的bean时出错:注入autowired依赖项失败;嵌套的异常是org.springframework.beans.factory.beanCreationException:不能autowire字段:org.thymeleaf.spring4.springTemplateEngine com.flex.eventManagement.handler.helper.dbTemplateresolver.templateEngine;嵌套异常是org.springframework.beans.factory.beanCurrentlyIncreationException:创建名为“模板引擎”的bean时出错:请求的bean当前正在创建中:是否存在不可解析的循环引用?

更新了从DbTemplateResolver类中删除模板引擎自动连接。Autowire到MessageForMathelPer.java类中,如下所示

class MessageFormatHelper{

 @Bean
  public DbTemplateResolver dbTemplateResolver() {
    DbTemplateResolver resolver = new DbTemplateResolver();
      resolver.setOrder(2);
      return resolver;
  }

  @Bean
  public SpringTemplateEngine thymeleafTemplateEngine() {
      SpringTemplateEngine engine = new SpringTemplateEngine();
      engine.setTemplateResolvers(Sets.newHashSet(dbTemplateResolver()));
      return engine;
  }
}

另外,我需要从MessageFormatHelper中删除SpringTemplateEngine自动连线,对吗?那么如何调用mergedmessage=templateengine.process(fileName,ctx);

更新2。MessageFormatHelper中必须遵循

  @Autowired
  DbTemplateResolver dbTemplateResolver;

  @Autowired
  SpringTemplateEngine templateEngine;
@PostConstruct
    public void extension() {
        templateEngine.addTemplateResolver(dbTemplateResolver);
    }

共有1个答案

孔驰
2023-03-14

您的代码有缺陷,而且您似乎对Spring的工作方式以及应该如何使用Spring来配置东西缺乏基本的理解。

首先,您正在使用Spring Boot并希望使用Thymeleaf。这只需添加spring-boot-starter-thymeleaf作为项目的依赖项即可。(我假设你已经这么做了)。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf<artifactId>
</dependency>

Spring Boot会检测到类路径上有Thymeleaf,ThymeleAfAutoConfiguration将启动并为您配置SpringTemplateEngine。它甚至会检测ItemplateResolver类型的每个bean,我假设您的DBTemplateResolver实现了这些bean。

@Bean
public ITemplateResolver dbTemplateResolver() {
    return new DbTemplateResolver();
}

Spring将检测它并将其注入自动配置的SpringTemplateEngine中。

您唯一需要做的是在类中需要SpringTemplateEngine,您需要自动连接它。只需使用超类,而不是具体类型。

@Autowired
private TemplateEngine templateEngine;

不要在以后尝试配置它,使用框架进行配置。

 类似资料:
  • 我试图在spring中使用thymeleaf对文本字符串进行本地化。我的html模板位于/src/main/resources/templates/ 所以我有: 解析模板“索引”时出错,模板可能不存在,或者任何已配置的模板解析程序都无法访问 我怀疑这是由于行中的路径不正确造成的,但无法找到应该放在那里的前缀。 似乎大多数示例都将模板置于WEB-INF之下。这也是我应该遵循的推荐方式吗?

  • 下面是index.html 它们在不同的文件夹中,但pathing应该工作,除非我只是错过了一些真正愚蠢的东西。

  • 我有一个基本的SpringBoot应用程序。使用Spring初始值设定项、嵌入式Tomcat、Thymeleaf模板引擎和作为可执行JAR文件的包 我想将所有应用程序错误重定向到一个公共页面。我已经创建了这个控制器: 我的配置文件: 以及错误模板 但结果是: 这就是提出的解决方案的结果: 检查属性,这些是属性,消息就在那里:

  • 我试图用SpringBoot中的一些数据填充一个thymeleaf模板。我想做的是 我已经尝试了这里提出的两种解决方案:如果属性和特性存在,则显示文本;按照Thymeleaf的呈现顺序,因为< code>group.organization为空,所以不应该显示整个内部< code>td。 还有一个问题,因为蒂梅莱夫抱怨说 我不明白为什么会发生这种情况,因为组对象存在,只是组织为空

  • 所以,我看到在Stackoverflow中都能回答这个问题,但对我没有任何帮助。(SpringMVC+Thymeleaf,错误消息是:模板可能不存在,或者任何已配置的模板解析程序都无法访问

  • 主要内容:1. Thymeleaf 简介,2. Thymeleaf 语法规则,3. Thymeleaf 公共页面抽取Thymeleaf 是一款用于渲染 XML/XHTML/HTML5 内容的模板引擎。它与 JSP,Velocity,FreeMaker 等模板引擎类似,也可以轻易地与 Spring MVC 等 Web 框架集成。与其它模板引擎相比,Thymeleaf 最大的特点是,即使不启动 Web 应用,也可以直接在浏览器中打开并正确显示模板页面 。 1. Thymeleaf 简介 Thymel