有两种使用Play框架创建海关标签的方法。

  1. 通过在应用程序/视图/标签中定义凹槽模板
  2. 直接在纯Java中,让一堂课扩展了fasttags

最新记录。

有帮助吗?

解决方案

因此,类似于Javaextensions通过扩展Javaextensions类的工作方式类似,以创建一个快速签名,您需要创建一个扩展快速标签的类。您要执行的标签的每种方法都需要符合以下方法结构。

public static void _tagName(Map<?, ?> args, Closure body, PrintWriter out, ExecutableTemplate template, int fromLine)

请注意标签名称之前的下划线。

要了解如何构建实际标签,最简单的方法是查看FastTag的源代码,并在操作中查看一个。

这是Git Hub的直接源。https://github.com/playframework/play/blob/master/framework/src/play/templates/fasttags.java

以下是我复制的一些,以便我可以解释它的工作原理。

public static void _verbatim(Map<?, ?> args, Closure body, PrintWriter out, ExecutableTemplate template, int fromLine) {
    out.println(JavaExtensions.toString(body));
}

因此,第一种方法是 逐字 标签,简单地调用Javaextensions上的Tostring方法,然后通过标签正文传递。标签的主体将是打开和关闭标签之间的任何东西。所以

<verbatim>My verbatim</verbatim>

身体价值将是

My verbatim

第二个示例稍微复杂稍微复杂。这是一个依赖父标签功能的标签。

public static void _option(Map<?, ?> args, Closure body, PrintWriter out, ExecutableTemplate template, int fromLine) {
    Object value = args.get("arg");
    Object selectedValue = TagContext.parent("select").data.get("selected");
    boolean selected = selectedValue != null && value != null && selectedValue.equals(value);
    out.print("<option value=\"" + (value == null ? "" : value) + "\" " + (selected ? "selected=\"selected\"" : "") + "" + serialize(args, "selected", "value") + ">");
    out.println(JavaExtensions.toString(body));
    out.print("</option>");
}

该代码通过输出HTML选项标签来工作,并通过检查从父标签中选择哪个值来设置所选值。前3行只是获取数据,并设置准备输出的数据。然后,最后3行输出标签的结果。

我链接到的源代码中还有更多示例,具有不同程度的复杂性,但希望这对您来说是一个很好的起点。

为了确保您的标签不会在项目之间或与核心播放标签之间发生冲突,您可以使用类级注释 @fasttags.namespace设置名称空间。

因此,对于Hello标签,在My.tags的名称空间中,您将执行以下操作

@FastTags.Namespace("my.tags") 
public class MyFastTag extends FastTags {
    public static void _hello (Map<?, ?> args, Closure body, PrintWriter out, ExecutableTemplate template, int fromLine) {
        ...
    }
}

然后在模板中,您将Hello标签称为

#{my.tags.hello/}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top