Извлечение содержимого DIV с помощью Sitemesh Decorators - PullRequest
1 голос
/ 15 сентября 2010

Я хотел бы знать, как можно извлечь содержимое определенного DIV с помощью декораторов вместо использования <decorator:body />, который будет извлекать все содержимое внутри тега <body>.

Ответы [ 3 ]

3 голосов
/ 14 февраля 2012

Это возможно с версией 2.4.2 для sitemesh, которую я использую. Обнаружил ответ на Кристиан Гробмайер , так что вот мой 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

  <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 (с использованием 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

0 голосов
/ 27 сентября 2010

SiteMesh поставляется с com.opensymphony.module.sitemesh.multipass.DivExtractingPageParser.Он ограничен в функциональности;он извлекает div только на один уровень ниже тела.

0 голосов
/ 15 сентября 2010

NB Черный Сенсей опубликовал лучший ответ ниже.

Я не думаю, что это возможно.Sitemesh - довольно простая система шаблонов, в которой очень мало тегов - всего пять.Здесь полный список decorator taglib

Возможно, вы захотите взглянуть на другую систему шаблонов, если вам нужен такой уровень контроля.

...