当我使用layout.vm时,如何在速度中包含额外的静态文件(css,js)?

时间:2016-03-01 10:27:46

标签: java velocity

我有layout.vm这样的

<html> 
<head>
  <title>$!page_title</title>
  <link href="path/to/css.css">
</head>
<body>
  $screen_content
  <script src="path/to/js.js"></script>
</body>
</html>

这里需要使用user.vm

呈现layout.vm
#set($page_title="User") 
<div>hello, user.vm</div>

但是user.vm需要更多的js / css文件 我希望渲染结果会像这样

<html>
<head>
  <title>User</title>
  <link href="path/to/css.css">
  <link href="path/to/user.css">
</head>
<body>
  <div>hello, user.vm</div>
  <script src="path/to/js.js"></script>
  <script src="path/to/user.js"></script>
</body>
</html>

我该怎么办?

1 个答案:

答案 0 :(得分:0)

user.vm声明另一个变种:

#set($isUser = true)

现在编辑layout.vm。有两种选择。如果你只想使用一个样式表,那么就像这样切换它们:

<head>
  <title>$!page_title</title>
  #if($isUser)
      <link rel="stylesheet" href="path/to/user.css">
  #else
      <link rel="stylesheet" href="path/to/css.css">
  #end
</head>

或覆盖这样的样式

<head>
  <title>$!page_title</title>
  <link rel="stylesheet" href="path/to/css.css">
  #if($isUser)<link rel="stylesheet" href="path/to/user.css">#end
</head>

对您的脚本执行相同操作。如果你把它们放在头部,你甚至可以在一次检查中做到这一点。

注意:你可以通过检查$!page_title是否等于'User'来做同样的事情,但这不是最好的主意,因为你重载了var的含义。因此,我建议使用另一个。

另请注意:此解决方案完全适用于Velocity。如果你正在使用支持对象,你应该使用它们(通常)来声明和设置var(s)。

在Velocity 1.7中测试