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

huangapple go评论83阅读模式
英文:

Passing an enum value to a template extension method in Quarkus-Qute

问题

以下是翻译好的部分:

我有以下模板扩展

```java
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());
    }
}

还有 Input 类:

package com.company;

public class Input {
    String foo = "bar";

    public String getFoo() {
        return foo;
    }

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

I have following template extension:

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("...");
    }
}

With this enum:

package com.company;

public enum SomeEnum {
    LOREM,
    IPSUM;
}

In my template I do following:

{input.myMethod('LOREM')}

This works great, but I am wondering how and if I can use the enum value directly:

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("...");
    }
}

I have tried:

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

But this creates:

NOT_FOUND

Hello resource:

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());
    }
}

And Input Class:

package com.company;

public class Input {
    String foo = "bar";

    public String getFoo() {
        return foo;
    }

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

答案1

得分: 1

我也需要这样做,通过查阅 Quarkus 的 GitHub 问题,我找到了一个答案。您可以使用 模板扩展 来实现。

在您的枚举类中添加一个类似这样的方法:

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

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

英文:

I needed to do this too, and I found an answer by searching through the Github issues for Quarkus. You can do it with Template Extensions

Add a method like this to your Enum:

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

and then in your template, you can access it using {SomeEnum:LOREM}

huangapple
  • 本文由 发表于 2020年10月6日 12:19:41
  • 转载请务必保留本文链接:https://go.coder-hub.com/64219300.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定