我正在研究一个小型quarkus项目,该项目服务于使用qute模板引擎创建的HTML页面。
我想知道是否可以访问一些String常量值到模板,而不必将它们作为.data("key", value)
传递到模板。
一个例子,我为查询参数定义了常量,我想在模板引擎生成的HTML中使用它们。
改编自官方指南Qute is a templating engine
我的JAX-RS类/src/main/java/com/company/HelloResource.java
看起来像这样:
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.QueryParam;
import javax.ws.rs.core.MediaType;
import io.quarkus.qute.Template;
import io.quarkus.qute.TemplateInstance;
@Path("hello.html")
public class HelloResource {
@Inject
Template hello;
private static final String NAME_QUERY_PARAM = "name";
@GET
@Produces(MediaType.TEXT_HTML)
public TemplateInstance get(@QueryParam(NAME_QUERY_PARAM) String name) {
String helloStatement;
if (name == null) {
helloStatement = "Welcome!";
} else {
helloStatement = "Hello " + name + "!";
}
return hello.data("helloStatement", helloStatement);
}
}
hello模板/src/main/resources/templates/hello.html
如下所示:
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Test</title>
</head>
<body>
<h1>{helloStatement}</h1>
<form action="./hello.html" method="GET">
<div>
<label for="name">The name:</label>
<input name="name" id="name" value="John">
</div>
<div>
<button>Say hi!</button>
</div>
</form>
</body>
</html>
对于<input>
标签,我想写:
<input name="{com.company.HelloResource.NAME_QUERY_PARAM}" id="name" value="John">
在编译时将com.company.HelloResource.NAME_QUERY_PARAM
替换为其值。
答案 0 :(得分:0)
您最近获得的“不传递值”是使用@TemplateExtension
,您可以在https://quarkus.io/guides/qute-reference#template_extension_methods上查看有关它的更多详细信息
我准备了一个小例子来说明夸克达到恒定字符串的方式。在html的下方,
<h1>{item.someVar}</h1>
<h1>{str:Any1}</h1>
<h1>{str:g('2')}</h1>
<h1>{str:g('1')}</h1>
“ str”是quarkus的命名空间方法,而使“ str”在这里工作需要code。
您也可以将常量放入模板所用对象旁边的类中,here方式。
答案 1 :(得分:0)
好像您可以将CDI组件直接注入qute中一样。我创建了一个@ApplicationScoped @Named bean
@ApplicationScoped
@Named
public class ApplicationBean {
@ConfigProperty(name = "quarkus.application.name")
String application;
public String getName() {
return application;
}
}
并像这样在我的模板中引用
<title>{inject:applicationBean.name}</title>
答案 2 :(得分:0)
在 Qute 中还没有直接访问静态字段的内置方法。 Begui 和 özkan 是对的:您可以使用带有命名空间的扩展方法或注入 @Named
bean。