在Quarkus-Qute

时间:2020-10-06 04:19:41

标签: java templates extension-methods quarkus quarkus-qute

我具有以下模板扩展名:

package com.company;

import io.quarkus.qute.RawString;
import io.quarkus.qute.TemplateExtension;

@TemplateExtension
public class TemplateExtensions {

    static RawString myMethod(Input input, String someEnumName) {
        SomeEnum value = SomeEnum.valueOf(someEnumName);
        //...
        return new RawString("...");
    }
}

使用此枚举:

package com.company;

public enum SomeEnum {
    LOREM,
    IPSUM;
}

在我的模板中,我执行以下操作:

{input.myMethod('LOREM')}

这很好用,但是我想知道如何以及是否可以直接使用枚举值:

package com.company;

import io.quarkus.qute.RawString;
import io.quarkus.qute.TemplateExtension;

@TemplateExtension
public class TemplateExtensions {

    static RawString myMethod(Input input, SomeEnum value) {
        //...
        return new RawString("...");
    }
}

我尝试过:

{input.myMethod(com.company.SomeEnum.LOREM)}

但这会创建:

NOT_FOUND

您好资源:

package com.company;

import javax.inject.Inject;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import io.quarkus.qute.Template;
import io.quarkus.qute.TemplateInstance;

@Path("/hello")
public class ExampleResource {

    @Inject
    Template helloTemplate;

    @GET
    @Path("/index.html")
    public TemplateInstance index() {
        return helloTemplate.data("input", new Input());
    }
}

输入类别:

package com.company;

public class Input {
    String foo = "bar";

    public String getFoo() {
        return foo;
    }

    public void setFoo(String foo) {
        this.foo = foo;
    }
}

1 个答案:

答案 0 :(得分:1)

我也需要这样做,我通过搜索GitHub上的Quarkus找到了答案。您可以使用Template Extensions

将这样的方法添加到您的枚举中:

    @TemplateExtension(namespace = "SomeEnum", matchName = ANY)
    static SomeEnum getVal(String val) {
        return SomeEnum .valueOf(val.toUpperCase());
    }

,然后在模板中,您可以使用{SomeEnum:LOREM}

进行访问