Java Velocity#解析,但将其分配给变量
假设您有一个包含(已解析)页眉、正文和页脚模板的标准模板 在主体模板中定义了一个变量,如$subject,您希望它也显示在标题模板中 在其他一些模板语言中,如HTML::Mason(基于perl),您将首先计算主体模板以获取$subject变量,但将其输出临时存储在一个变量中,以便最终输出的顺序正确(页眉、主体、页脚) 在速度上,它看起来像 set($body=#parse(“body.vm”)) 解析(“header.vm”) ${body} 解析(“footer.vm”) 然而,这似乎不起作用,有没有关于如何做到这一点的想法?您可以使用的一部分 这允许您为应用程序定义布局——我们称之为Java Velocity#解析,但将其分配给变量,java,velocity,template-engine,Java,Velocity,Template Engine,假设您有一个包含(已解析)页眉、正文和页脚模板的标准模板 在主体模板中定义了一个变量,如$subject,您希望它也显示在标题模板中 在其他一些模板语言中,如HTML::Mason(基于perl),您将首先计算主体模板以获取$subject变量,但将其输出临时存储在一个变量中,以便最终输出的顺序正确(页眉、主体、页脚) 在速度上,它看起来像 set($body=#parse(“body.vm”)) 解析(“header.vm”) ${body} 解析(“footer.vm”) 然而,这似乎不起作
application.vm
——您可以在其中解析页眉、页脚等内容,并使用屏幕内容
声明声明主体内容的位置,例如:
<html>
<head>
<title>$subject</title>
</head>
<body>
#parse("header.vm")
$screen_content
#parse("footer.vm")
</body>
</html>
可以找到更详细的信息。如果我理解正确,您希望在
header.vm
和body.vm
模板中插入一个名为$subject
的速度变量。现在,变量是在body.vm
模板中定义的,因此您不能在早期的模板header.vm
中引用它
为什么不将$subject的定义抽象到它自己的模板片段中,称为globals.vm
say,然后将其包含在顶级模板中。所以你会:
#parse("globals.vm")
#parse("header.vm")
#parse("body.vm")
#parse("footer.vm")
上述两种解决方案中的任何一种都会起作用。VelocityLayoutServlet解决方案需要一个名为Velocity工具的额外包(也来自Velocity)。我自己也偏爱这种方法(和变体) 第三种方法是简单地将#parse放在引号中:
set ($body="#parse('body.vm')")
在#集合中,双引号中的任何内容都将被计算。单引号内的字符串按字面形式传递
set ($body="#parse('body.vm')")