现在我使用struts,sitemesh,velocity,配置已经可以使用
在主页面中:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
#parse("common/taglibs.vm")
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<div class="body-0214">
#parse("/velocity/info/head.vm")
$body
#parse("/velocity/info/foot.vm")
</div>
</body>
</html>
在taglibs.vm中我定义了一些全局变量:
#set ($ctx=$request.contextPath)
#set ($imageService=$controlUtil.getDomainName($session.servletContext))
在head.vm
和main.vm
时,我尝试获取全局变量:
$ctx
$imageService
得到结果:
$ctx
$imageService
没有任何改变!
但是当我将#parse("common/taglibs.vm")
放入main.vm
(结果页面)时,它会得到正确的结果:
http://127.0.0.1
这是一个问题:为什么必须在儿童页面推荐#parse("common/taglibs.vm")
,其他问题是当我将#parse("common/taglibs.vm")
放入head.vm
时,它也无效,我感到非常惊讶
为什么我得到了那个结果,不管我错在哪里或总是那样,请帮助我!
答案 0 :(得分:1)
我认为您正面临配置问题或完全超出Velocity的问题。
让我们从简化事物开始。对于测试,将以下所有vm-templates放在同一文件夹中。最好将它们放在声明为Velocity资源加载器路径或Velocity根目录的文件夹中。
第一步:
taglib.vm:
#set($ctx = $request.contextPath)
main.vm:
#parse("taglibs.vm")
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<div class="body-0214">
$ctx
</div>
</body>
</html>
结果将是上下文路径 - 在您的情况下http://127.0.0.1
。根据你发布的内容,这应该有效。
第二步:
像这样创建一个文件head.vm
:
$ctx
并将main.vm
更改为:
#parse("taglibs.vm")
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<div class="body-0214">
#parse("head.vm")
</div>
</body>
</html>
结果应该是一样的。
第三步:
创建文件secondLevel.vm
:
$ctx
是的,现在与head.vm相同。
现在将head.vm
更改为
#parse("secondLevel.vm")
在默认配置中,这仍然会产生相同的结果。如果不是,则可能会更改默认配置。如果您看到$ctx
而不是http://127.0.0.1
,请检查Velocity配置。寻找parse_directive.maxdepth
。该值应高于1
请注意,默认值为10
,因此默认情况下您最多可以解析10个嵌套的vm文件。
如果您在第一步或第二步中未能看到所需的结果,我建议在一个全新的项目中测试,以消除副作用。
虽然不太可能导致问题,但请确保使用最新版本的Velocity 1.7