You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 18:41:04