【问题标题】:Extracting a DIV's content using Sitemesh Decorators使用 Sitemesh 装饰器提取 DIV 的内容
【发布时间】:2011-04-12 14:28:27
【问题描述】:

我想知道如何使用装饰器提取特定 DIV 的内容,而不是使用 <decorator:body /> 来获取 <body> 标记内的所有内容。

【问题讨论】:

  • 实际上并不是一个 sitemesh 解决方案,但如果你想让它运行得非常快,你可以使用 jQuery 来实现,比如 $(document).ready(function() {$("#inner-div").prependTo("#content-wrapper");});

标签: java jsp decorator sitemesh


【解决方案1】:

我正在使用的 2.4.2 版本的 sitemesh 是可能的。在 christian grobmeier 上找到了答案,所以这是我的 sitemesh.xml

<sitemesh>
  <property name="decorators-file" value="/WEB-INF/decorators.xml"/>
  <excludes file="${decorators-file}"/>

  <page-parsers>
    <parser content-type="text/html" class="com.opensymphony.module.sitemesh.parser.HTMLPageParser"/>
  </page-parsers>

  <page-parsers>
    <parser content-type="text/html" class="com.opensymphony.module.sitemesh.multipass.DivExtractingPageParser"/>
  </page-parsers>

  <decorator-mappers>
    <mapper class="com.opensymphony.module.sitemesh.mapper.ConfigDecoratorMapper">
        <param name="config" value="${decorators-file}"/>
    </mapper>
  </decorator-mappers>
</sitemesh>

这是我的 mainlayout.jsp 的 sn-p

  <div id="container" style=" padding-top: 60px; ">
            <div id="leftbar">

                <div style="height:400px;">
                    <img src="<spring:url value='/images/Logo.png'/>" class="logo"/>
                </div>

                <decorator:getProperty property="div.side-menu"/>
                <%--<decorator:body />--%>
            </div>
            <div>
                <decorator:getProperty property="div.top"  />
            </div>
            <div>
                <decorator:getProperty property="div.content"  />
            </div>
        </div>

home.ftl 的 sn-p(使用 freemarker)

<div id="side-menu">
  <ul>
    <li class="current"><a href="/home">All</a></li>
      <#list genre as gen >
        <li><a href="/category?cat=${gen}">${gen}</a></li>
     </#list>
</ul>
</div>


<div id="top">
  <ul id="slider" class="architectorSlider">
     <li>
        <img src="<@spring.url '/images/slide_1.jpg'/>" alt="" class="slide-image"/>
        <img src="<@spring.url '/images/slider/timthumbf014.jpg'/>?src=<@spring.url '/images/slide_1.jpg' />&amp;w=100&amp;h=42&amp;zc=1"
             alt="" class="slide-thumbnail"/>
    </li>
  </ul>
 </div>

如果还不算太晚,我希望这能让你继续前进:D

【讨论】:

  • 这是不对的。您应该将HtmlPageParser 替换为DivExtractingPageParser。否则可能会发生奇怪的事情。另请注意,您的 XML 格式不正确,不应有两个 &lt;page-parsers&gt; 部分。
【解决方案2】:

NB Black Sensei 在下面发布了更好的答案。

我认为这是不可能的。 Sitemesh 是一个非常基本的模板系统,只有很少的标签——总共五个。这里有完整列表decorator taglib

如果您需要这种级别的控制,您可能需要查看另一个模板系统。

【讨论】:

    【解决方案3】:

    SiteMesh 带有 com.opensymphony.module.sitemesh.multipass.DivExtractingPageParser。它的功能有限;它只提取身体下方一层的 div。

    【讨论】:

    • 这是一件好事...否则sitemesh 将与任何具有id 的div 混淆。将一个 div 包装在另一个没有 id 的 div 中会保护它。
    猜你喜欢
    • 2014-02-14
    • 2011-12-24
    • 2013-03-01
    • 2011-05-21
    • 2012-04-20
    • 2013-08-02
    • 2012-05-31
    • 2011-02-20
    • 2014-05-30
    相关资源
    最近更新 更多