play - 将全局变量添加到自定义标记

时间:2012-09-04 15:40:01

标签: java playframework playframework-1.x

我有一个表示HTML的字符串(通过服务器端请求动态获得)。在此HTML中,有一个自定义播放标记。例如:

<html><body><div>#{myTag /}</div></body></html>

现在,我想将变量传递给此标记:

Template playTemplate = TemplateLoader.loadString(myHtml); // the HTML above
playTemplate.compile();

SomeObject myObject = SomeObject.find("name", "test").first();
Map<String,Object> args = new HashMap<String, Object>();
args.put("myObject", myObject);
String result = playTemplate.render(args);

在我的自定义“myTag.tag”中,代码​​如下所示:

<p>
    Hello world: ${myObject.name}
</p>

但是我收到了一个错误:

Exception raised was NullPointerException : Cannot get property 'name' on null object.

该对象不为null。当我在HTML字符串中用#{myTag /}替换${myObject.name}时,一切正常!如何将对象传递给自定义标记?

1 个答案:

答案 0 :(得分:1)

您的模板应该是

<html><body><div>#{myTag obj: myObject/}</div></body></html>

你的标签应该是

<p>Hello world: ${_obj.name}</p>

实质上,您需要将render args从template显式传递给tag。

Rythm template engine支持隐式传递渲染args到标记但是。它带来了groovy模板中没有的许多其他功能。查看http://rythmengine.com

上的完整演示