2

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;
    }
}
Jmini
  • 9,189
  • 2
  • 55
  • 77

1 Answers1

1

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}

Frank Riccobono
  • 1,043
  • 6
  • 13