我需要在Velocity模板中添加一些非常复杂的动态HTML结构。如果我试图直接在模板中写这些,那将是一个绝对的混乱。
让我解释一下我要做的事情......比方说,在我的网站上,用户可以发表评论。我希望能够在我的模板中执行此操作,而不是编写注释表和发布表单中的所有复杂动态HTML结构:
<div>
// call to a method that generates the comments table
</div>
<div>
// call to a method that generates the comments form
</div>
在Ruby On Rails中,有一些名为helpers的东西,允许你从模板中调用,基本上是一个返回动态生成的HTML块的方法,嵌入到模板中你叫它。助手的好处是你只在你使用的那些上花费CPU。使用VelocityContext.put()
方法,似乎我必须提前生成我需要的所有内容。这是一个问题,因为我最终会有大约50个不同的助手,我需要非程序员的网页设计师能够随意交换它们。
所以我在问,
答案 0 :(得分:2)
您是否考虑过(或正在使用)Velocity Tools?我倾向于认为它们与Rails助手非常类似,绝对是保持视图特定逻辑的最佳位置。根据具体实现,您可以将帮助器中的连线看作自定义工具,然后让Tools框架无缝地管理实例化等。如果您的助手只是一个POJO,您可能会发现它已经作为工具工作而没有任何更改。
或者,如果您的帮助程序只构建HTML结构并且没有任何复杂的Java依赖项,那么您可以将它们创建为macros吗?
答案 1 :(得分:1)
抱歉,我没有使用我的大脑提交了这个。你要做的就是创建一个Helper类:
public class HtmlHelper {
public String getSomeHtml() {
return "<p>badgers</p>";
}
}
然后在上下文中添加一个实例:
VelocityContext context = new VelocityContext();
HtmlHelper helper = new HtmlHelper();
context.put("helper", helper);
然后在模板中:
<div>
$helper.getSomeHtml()
</div>