有人可以解释如何使用FastTags吗?
2022-09-01 19:20:30
有两种方法可以使用 play 框架创建自定义标签。
- 通过在应用/视图/标记中定义时髦的模板
- 直接在纯java中,通过让类扩展FastTags
最新的没有记录。
有两种方法可以使用 play 框架创建自定义标签。
最新的没有记录。
因此,与 JavaExtensions 通过扩展 JavaExtensions 类的工作方式类似,要创建 FastTag,您需要创建一个扩展 FastTags 的类。要作为标记执行的每个方法都需要符合以下方法结构。
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 行输出标记的结果。
在我链接到的源代码中还有更多示例,它们具有不同程度的复杂性,但希望这对你来说是一个很好的起点。
若要确保标记不会在项目之间或与核心 Play 标记发生冲突,可以使用类级批注@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/}