【问题标题】:sitemesh and tiles 2.1 integration with spring MVCsitemesh 和 tiles 2.1 与 spring MVC 的集成
【发布时间】:2010-05-18 03:13:16
【问题描述】:

是否可以将 sitemesh 和 tile 2.1 与 spring mvc 集成? 我想用瓦片合成布局,然后用sitemesh装饰。

我用的是这样的瓷砖。

   <bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles2.TilesConfigurer">
        <property name="definitions">
            <list>
                <value>/WEB-INF/layouts/layouts.xml</value>
                <value>/WEB-INF/views.xml</value>
                <value>/WEB-INF/hotels/views.xml</value>
                <value>/WEB-INF/hotels/booking/views.xml</value>
                                <value>/WEB-INF/cliente/views.xml</value>
            </list>
        </property>
    </bean>

然后我在xml中配置sitemesh。

 <filter>
        <filter-name>sitemesh</filter-name>
        <filter-class>com.opensymphony.sitemesh.webapp.SiteMeshFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>sitemesh</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

然后我添加了装饰器

<?xml version="1.0" encoding="UTF-8"?>
<decorators defaultdir="/styles">


    <decorator page="application/themeManager/theme.jsp" name="theme">
        <pattern>/spring/hotels/index</pattern>

    </decorator>


</decorators>

但这并没有什么作用,我认为tiles避免到sitemesh来处理页面,如何做到这一点?

这个sitemesh.xml我只是使用示例自带的默认

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

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

    <decorator-mappers>

        <mapper class="com.opensymphony.module.sitemesh.mapper.PageDecoratorMapper">
            <param name="property.1" value="meta.decorator" />
            <param name="property.2" value="decorator" />
        </mapper>

        <mapper class="com.opensymphony.module.sitemesh.mapper.FrameSetDecoratorMapper">
        </mapper>

        <mapper class="com.opensymphony.module.sitemesh.mapper.AgentDecoratorMapper">
            <param name="match.MSIE" value="ie" />
            <param name="match.Firefox" value="mozilla" />
            <param name="match.Opera" value="opera" />
            <param name="match.Lynx" value="lynx" />
        </mapper>

        <mapper class="com.opensymphony.module.sitemesh.mapper.PrintableDecoratorMapper">
            <param name="decorator" value="printable" />
            <param name="parameter.name" value="printable" />
            <param name="parameter.value" value="true" />
        </mapper>

        <mapper class="com.opensymphony.module.sitemesh.mapper.RobotDecoratorMapper">
            <param name="decorator" value="robot" />
        </mapper>

        <mapper class="com.opensymphony.module.sitemesh.mapper.ParameterDecoratorMapper">
            <param name="decorator.parameter" value="decorator" />
            <param name="parameter.name" value="confirm" />
            <param name="parameter.value" value="true" />
        </mapper>

        <mapper class="com.opensymphony.module.sitemesh.mapper.FileDecoratorMapper">
        </mapper>

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

    </decorator-mappers>

</sitemesh>

【问题讨论】:

  • 你的 sitemesh.xml 文件是什么样的?
  • 就像发行版附带的默认值一样,我注意到如果我将配置添加到不受 spring 管理的路径,它也可以工作,如果我使用 org.springframework.web .servlet.view.InternalResourceViewResolver 它的工作原理

标签: spring spring-mvc tiles sitemesh tiles2


【解决方案1】:

SiteMesh 有点脆弱,您无法从中获得太多日志信息,因此很难确定是否真的发生了任何事情。

我的猜测是装饰器被绕过了,因为内容类型不匹配。您的 sitemesh.xml 文件包含以下条目:

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

换句话说,只有当响应内容类型为text/html 时才会调用装饰器。

你说如果你把它指向一条不通过 Spring 的路径它会起作用,我认为这是因为 Spring 正在改变内容类型,因此绕过了装饰器。

尝试将以下附加条目添加到sitemesh.xml

<parser content-type="text/html;charset=ISO-8859-1" class="com.opensymphony.module.sitemesh.parser.HTMLPageParser" />

注意添加到内容类型的charset。 Spring MVC 对内容类型非常挑剔,我怀疑它正在将其更改为包含字符集的内容。如果您的本地字符集不是ISO-8859-1,那么试试吧。您可以添加任意数量的&lt;parser&gt; 条目。

【讨论】:

  • 它不起作用,我添加了字符集 ISO-8859-1 和另一个 utf-8 解析,但仍然不起作用
  • 我改变了模式,它可以工作 *
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-24
  • 1970-01-01
相关资源
最近更新 更多