首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将枚举值传递给Quarkus-Qute中的模板扩展方法

将枚举值传递给Quarkus-Qute中的模板扩展方法
EN

Stack Overflow用户
提问于 2020-10-06 12:19:41
回答 1查看 142关注 0票数 2

我有以下模板扩展:

代码语言:javascript
复制
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("...");
    }
}

使用此枚举:

代码语言:javascript
复制
package com.company;

public enum SomeEnum {
    LOREM,
    IPSUM;
}

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

代码语言:javascript
复制
{input.myMethod('LOREM')}

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

代码语言:javascript
复制
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("...");
    }
}

我试过了:

代码语言:javascript
复制
{input.myMethod(com.company.SomeEnum.LOREM)}

但这会创建:

代码语言:javascript
复制
NOT_FOUND

Hello资源:

代码语言:javascript
复制
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());
    }
}

和Input Class:

代码语言:javascript
复制
package com.company;

public class Input {
    String foo = "bar";

    public String getFoo() {
        return foo;
    }

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

回答 1

Stack Overflow用户

发布于 2020-10-26 00:39:11

您可以使用Template Extensions来完成此操作

代码语言:javascript
复制
    @TemplateExtension(namespace = "SomeEnum", matchName = ANY)
    static SomeEnum getVal(String val) {
        return SomeEnum .valueOf(val.toUpperCase());
    }

然后在您的模板中,您可以使用{SomeEnum:LOREM}进行访问

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64219300

复制
相关文章

相似问题

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