Oli*_*alo 25 java playframework
使用play框架创建海关标签有两种方法.
最新的没有记录.
Cod*_*nci 23
因此,类似于JavaExtensions如何通过扩展JavaExtensions类来创建FastTag,您需要创建一个扩展FastTag的类.要作为标记执行的每个方法都需要符合以下方法结构.
public static void _tagName(Map<?, ?> args, Closure body, PrintWriter out, ExecutableTemplate template, int fromLine)
Run Code Online (Sandbox Code Playgroud)
请注意标记名称前面的下划线.
要了解如何构建实际标记,最简单的方法是查看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));
}
Run Code Online (Sandbox Code Playgroud)
因此,第一个方法是verbatim标记,只是在JavaExtensions上调用toString方法,并传入标记的主体.标签的主体可以是打开和关闭标签之间的任何内容.所以
<verbatim>My verbatim</verbatim>
Run Code Online (Sandbox Code Playgroud)
身体价值将是
My verbatim
Run Code Online (Sandbox Code Playgroud)
第二个例子稍微复杂一点.它是一个依赖父标签运行的标签.
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>");
}
Run Code Online (Sandbox Code Playgroud)
此代码通过输出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) {
...
}
}
Run Code Online (Sandbox Code Playgroud)
然后在您的模板中,您将引用hello标记为
#{my.tags.hello/}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2134 次 |
| 最近记录: |