英文:
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}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论