PlayFramework 1 自定义标签 -- FastTags
最早是用 HTML 来自定义标签,现在觉得 HTML 写有关逻辑的代码就有点不伦不类了,HTML 里着重是显示代码。前有一篇
PlayFramework 1 模板应用 -- Java 对象扩展
学习了对 Java 对象扩展的方式,如果不是基于已有对象类型进行方法扩展来进行调用,就可以自定义 FastTags 的方式。
Java 对象扩展的使用是 ${obj.abc()}, FastTags 标签是 #{abc}...${/abc}。
FastTags 标签类继承自
这些都是得益约定优于配置,下面来几个例子,分别说明默认参数,命名参数,及多参数,标签体的处理。
上面定义了一个 hello 标签,标签参数从 args 中获取,默认参数名是 arg,标签体用 body 获得。在 HTML 页面中应用
页面中写成,用逗号分隔
最后,无论是在自定义标签还是在扩展的 Java 对象方法中都可以直接使用 request, params, flash, session, play, messages, errors, lang, out 对象,见 Implicit objects available in a template。
FastTags 标签可以有自己的命名空间,如为了避免与默认命名空间里的 play.templates.FastTags 中定义的标签冲突,可以为自己的标签类
这样,使用该标签就用
[版权声明]
本文采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可。
Java 对象扩展的使用是 ${obj.abc()}, FastTags 标签是 #{abc}...${/abc}。
FastTags 标签类继承自
play.templates.FastTags,标签对应方法的原型是public static void _tagName(Map<?, ?> args, Closure body, PrintWriter out, ExecutableTemplate template, int fromLine)
这些都是得益约定优于配置,下面来几个例子,分别说明默认参数,命名参数,及多参数,标签体的处理。
1package utilities;
2
3import groovy.lang.Closure;
4
5import java.io.PrintWriter;
6import java.util.Map;
7
8import play.templates.FastTags;
9import play.templates.GroovyTemplate.ExecutableTemplate;
10import play.templates.JavaExtensions;
11
12public class PlayTags extends FastTags {
13
14 public static void _hello(Map<?, ?> args, Closure body, PrintWriter out,
15 ExecutableTemplate template, int fromLine) {
16 out.println("Hello " + args.get("arg") + " " + JavaExtensions.toString(body));
17 }
18}上面定义了一个 hello 标签,标签参数从 args 中获取,默认参数名是 arg,标签体用 body 获得。在 HTML 页面中应用
#{hello 'Yanbin'}Good Morning#{/hello}多个参数时
#{hello arg:'Yanbin'}Good Morning#{/hello}
1 public static void _hello(Map<?, ?> args, Closure body, PrintWriter out,
2 ExecutableTemplate template, int fromLine) {
3 out.println("Hello " + args.get("name") + " " + args.get("greeting"));
4 }页面中写成,用逗号分隔
#{hello name:'Yanbin', greeting:'Good Morning'/}默认参数名和命名参数同时使用
1 public static void _hello(Map<?, ?> args, Closure body, PrintWriter out,
2 ExecutableTemplate template, int fromLine) {
3 out.println("Hello " + args.get("arg") + " " + args.get("greeting"));
4 }#{hello 'Yanbin', greeting:'Good Morning'/}没指定名字的参数名是 arg。
最后,无论是在自定义标签还是在扩展的 Java 对象方法中都可以直接使用 request, params, flash, session, play, messages, errors, lang, out 对象,见 Implicit objects available in a template。
FastTags 标签可以有自己的命名空间,如为了避免与默认命名空间里的 play.templates.FastTags 中定义的标签冲突,可以为自己的标签类
@FastTags.Namespace("my.tags") 加标注,如1@FastTags.Namespace("my.tags")
2public class PlayTags extends FastTags {
3 public static void _hello(........) { ........}
4}这样,使用该标签就用
#{my.tags.hello 'Yanbin'/}@FastTags.Namespace 就像是命名包一样,随便你指定什么样的层次。 永久链接 https://yanbin.blog/playframework-1-custom-tag-fast-tags/, 来自 隔叶黄莺 Yanbin's Blog
[版权声明]
本文采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可。