我具有以下模板扩展名:
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;
}
}
答案 0 :(得分:1)
我也需要这样做,我通过搜索GitHub上的Quarkus找到了答案。您可以使用Template Extensions
将这样的方法添加到您的枚举中:
@TemplateExtension(namespace = "SomeEnum", matchName = ANY)
static SomeEnum getVal(String val) {
return SomeEnum .valueOf(val.toUpperCase());
}
,然后在模板中,您可以使用{SomeEnum:LOREM}