gpt4 book ai didi

java - Sitemesh 与速度 #parse 工作不正确

转载 作者:行者123 更新时间:2023-11-30 07:33:48 25 4
gpt4 key购买 nike

现在我使用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.vmmain.vm中我尝试获取全局变量:

$ctx
$imageService

得到结果:

$ctx
$imageService

没有任何变化!

但是当我将 #parse("common/taglibs.vm") 放入 main.vm(结果页面)时,它会得到正确的结果:

http://127.0.0.1

这是一个问题:为什么必须在子页面中推荐#parse("common/taglibs.vm"),另一个问题是当我放置#parse("common/taglibs.vm")时.vm") in head.vm,它也不起作用,我很惊讶

为什么我会得到这样的结果,是我哪里错了还是一直都是这样,请帮助我!

最佳答案

我认为您面临配置问题或完全超出 Velocity 范围的问题。

让我们从简化事情开始。为了进行测试,请将以下所有虚拟机模板放在同一文件夹中。最好将它们放在声明为 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

关于java - Sitemesh 与速度 #parse 工作不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35691226/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com