2

我需要在我的 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 中,有一些称为帮助程序的东西,它允许您从模板中调用,基本上,一个返回动态生成的 HTML 块的方法,该方法将嵌入到您调用它的模板中。助手的好处是你只在你使用的那些上花费 CPU。使用该VelocityContext.put()方法,似乎我必须提前生成我需要的所有内容。这是一个问题,因为我最终将拥有大约 50 个不同的助手,并且我需要非程序员网页设计师能够随意交换它们。

所以我问,

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

2 回答 2

2

您是否已经考虑过(或正在使用)Velocity Tools?我倾向于将它们视为非常类似于 Rails 助手,并且绝对是保留特定于视图的逻辑的最佳位置。根据具体的实现,您可以将帮助程序中的接线视为自定义工具,然后让工具框架无缝管理实例化等。如果您的帮助程序只是一个 POJO,您可能会发现它已经作为工具工作而无需任何更改。

或者,如果您的助手只构建 HTML 结构并且没有任何复杂的 Java 依赖项,也许您可​​以将它们创建为

于 2010-11-17T10:08:51.693 回答
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>

最后,与狗一起跳梅伦格舞以示庆祝。

于 2010-11-17T04:53:10.373 回答