Velocity中的Rails风格模板助手

时间:2010-11-17 03:13:12

标签: templates velocity html-helper view-helpers

我需要在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个不同的助手,我需要非程序员的网页设计师能够随意交换它们。

所以我在问,

  1. 我可以用Velocity做这样的事情吗?
  2. 如果没有,我可以使用其他模板引擎做这样的事情吗?
  3. 有没有更好的方法来做我想做的事情?

2 个答案:

答案 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>

最后,庆祝dance the merengue with a dog