【问题标题】:Sitemesh work with velocity #parse not right workedSitemesh 使用速度#parse 工作不正确
【发布时间】:2016-06-12 00:01:00
【问题描述】:

现在我用的是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")放在head.vm时,它也不起作用,我很惊讶

为什么我会得到这个结果,是不是我错了或者一直都是这样,请帮助我!

【问题讨论】:

    标签: java struts velocity sitemesh


    【解决方案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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-15
      • 1970-01-01
      • 1970-01-01
      • 2011-01-26
      相关资源
      最近更新 更多