2

我正在开发一个小型 quarkus 项目,该项目提供使用 qute 模板引擎创建的 HTML 页面。

我想知道是否可以将一些字符串常量值访问到模板,而不必将它们作为.data("key", value)模板传递。

例如,我为查询参数定义了常量,我想在模板引擎生成的 HTML 中使用它们。

改编自官方指南Qute 是一个模板引擎

我的 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在编译时替换为它的值。

4

3 回答 3

1

似乎您可以将 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>
于 2020-11-30T19:12:00.917 回答
0

在 Qute 中还没有直接访问静态字段的内置方法。Begui 和 özkan 是对的:您可以使用带有命名空间的扩展方法或注入@Namedbean。

于 2021-01-11T14:13:57.720 回答
0

最接近您可以获得“不传递值”的@TemplateExtension信息,您可以在https://quarkus.io/guides/qute-reference#template_extension_methods查看更多详细信息

我准备了一个小例子来展示 quarkus 达到恒定字符串的方式。下面是html的样子

    <h1>{item.someVar}</h1>
    <h1>{str:Any1}</h1>
    <h1>{str:g('2')}</h1>
    <h1>{str:g('1')}</h1>

“str”是 quarkus 的命名空间方法,“str”在这里工作是需要的代码

您还可以将常量放在用于模板的对象旁边的类中,方法如下。

这里是这个例子在我当地的样子。 在此处输入图像描述

于 2020-10-04T20:36:25.157 回答