24
A
回答
23
因此,类似于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行输出标签的结果。
我已经链接到源代码中有更多的例子,不同程度的复杂性,但希望这将是一个很好的起点。
为确保您的标签不会在项目间或核心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) {
...
}
}
,然后在模板中,你会引用你好标签作为
#{my.tags.hello/}
相关问题
- 1. 有人可以解释互斥体以及它如何使用?
- 2. 有人可以解释jQuery.sap.setObject?
- 3. 有人可以解释“ - '0'”
- 4. 有人可以解释吗?
- 5. 有人可以解释如何解释这个logcat吗?
- 6. 有人可以解释如何使用CANBUS协议?
- 7. 有人可以解释如何使用glDrawElements(iPhone)?
- 8. THREE.js - 有人可以解释如何使用这个库吗?
- 9. 有人可以解释如何使用fmdb的FMDatabaseQueue?
- 10. TDGOTCHI - 有人可以解释如何使其工作?
- 11. 有人可以解释如何在Spring集成中使用收件人
- 12. 任何人都可以解释如何使用conversationThreading-js?
- 13. 有人可以解释respond_to吗? :每?
- 14. 有人可以解释访问
- 15. 有人可以解释这个查询
- 16. 有人可以解释这个jQuery
- 17. 有人可以解释这个Array.prototype.find()polyfill?
- 18. 有人可以解释参数autovacuum_naptime吗?
- 19. 有人可以解释代码?
- 20. 有人可以解释toString()方法
- 21. 有人可以解释这个(VB)
- 22. 有人可以解释代码
- 23. 有人可以解释行结束吗?
- 24. 有人可以解释ContactsContracts吗?
- 25. 有人可以解释iFrames吗?
- 26. 有人可以解释RemoteViews GC行为?
- 27. 有人可以解释这行代码?
- 28. 有人可以解释1(1+)0
- 29. 有人可以请解释输出java
- 30. 有人可以解释这个代码
非常好,除此之外,您还可以解释类注释@FastTags。命名空间(“mytags”),这将是防止名称冲突的良好实践。 – niels 2010-11-09 18:08:24
好点,我现在补充说。 – Codemwnci 2010-11-09 18:52:30
谢谢!你能否提供一些细节来提升标签中的错误?说一个输入参数丢失...我如何产生一个错误/异常? – 2010-11-09 21:29:16