Quarkus中Qute模板能否为不同模板设置不同严格模式?
在Quarkus Qute中为不同模板设置不同Strict Mode
是的,你可以在Quarkus应用中配置多个Qute Engine实例,通过手动创建第二个Engine来实现不同模板使用不同的strict mode——因为Qute的strict mode确实是Engine级别的配置,无法直接在单个模板或渲染方法上修改。
实现步骤
1. 定义自定义限定符区分不同Engine
首先创建一个自定义限定符注解,用来区分Quarkus自动配置的默认Engine和我们手动创建的Engine:
import jakarta.inject.Qualifier; import java.lang.annotation.Retention; import java.lang.annotation.Target; import static java.lang.annotation.ElementType.FIELD; import static java.lang.annotation.ElementType.METHOD; import static java.lang.annotation.ElementType.PARAMETER; import static java.lang.annotation.RetentionPolicy.RUNTIME; @Qualifier @Target({METHOD, FIELD, PARAMETER}) @Retention(RUNTIME) public @interface NonStrictEngine { }
2. 手动创建第二个Engine实例
编写一个Producer类,生成带有非严格模式配置的Engine:
import io.quarkus.qute.Engine; import io.quarkus.qute.EngineBuilder; import jakarta.enterprise.context.ApplicationScoped; import jakarta.enterprise.inject.Produces; @ApplicationScoped public class QuteEngineProducer { @Produces @NonStrictEngine public Engine nonStrictEngine() { return EngineBuilder.builder() .strictMode(false) // 设置非严格模式 // 可根据需求添加其他配置,如模板路径、资源加载器等 .build(); } }
3. 注入并使用不同Engine加载模板
在业务类中分别注入默认Engine(全局配置的strict mode)和手动创建的非严格模式Engine,然后加载对应的模板:
import io.quarkus.qute.Engine; import io.quarkus.qute.Template; import jakarta.inject.Inject; import jakarta.ws.rs.GET; import jakarta.ws.rs.Path; @Path("/reports") public class ReportResource { // 默认Engine:使用quarkus.qute.strict-mode配置的值(建议设为true) @Inject Engine defaultEngine; // 手动创建的非严格模式Engine @Inject @NonStrictEngine Engine nonStrictEngine; private Template templateStrict; private Template templateNonStrict; // 初始化模板(也可以用@PostConstruct注解) void init() { templateStrict = defaultEngine.getTemplate("report1-strict.html"); templateNonStrict = nonStrictEngine.getTemplate("report2-nonstrict.html"); } @GET @Path("/strict") public String renderStrictReport() { return templateStrict.render(); } @GET @Path("/non-strict") public String renderNonStrictReport() { return templateNonStrict.render(); } }
关键说明
- 默认Engine的strict mode由
quarkus.qute.strict-mode配置项控制,建议将其设为true,作为全局严格模式的基础。 - 手动创建的Engine可以独立配置各种参数,除了strict mode,还能修改模板扩展名、表达式语法、错误处理逻辑等,完全与默认Engine隔离。
- 你提到的“在模板渲染时动态设置严格模式”目前Qute确实不支持,因为模板一旦被Engine加载,就会绑定该Engine的配置,无法在渲染阶段修改。
内容的提问来源于stack exchange,提问作者zolv
相关产品推荐
相关产品推荐

