与Spring MVC集成sitemesh和tile 2.1 [英] sitemesh and tiles 2.1 integration with spring MVC

查看:138
本文介绍了与Spring MVC集成sitemesh和tile 2.1的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

是否可以将sitemesh和tile 2.1与spring mvc集成在一起? 我想用瓷砖合成布局,然后用sitemesh装饰.

Is posible to integrate sitemesh and tiles 2.1 with spring mvc ? I want to composite the layout with tiles and then decorate with 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.

Then I configure sitemesh in the xml.

 <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>

但这并没有做任何事情,我认为磁贴避免了sitemesh来处理页面,该怎么做?

But this doesn't do nothing, I think that tiles avoid to sitemesh to process the page, how to do this ?

这是我使用示例随附的默认值的sitemesh.xml

This the sitemesh.xml I just using the default that comes with the examples

<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有点脆弱,并且从中获取的日志信息也不多,因此要确定是否确实发生了任何事情都是很棘手的.

SiteMesh is a bit fragile, and you don't get much logging information from it, so it can be tricky to determine if anything is actually happening.

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

My guess is that the decorator is being bypassed because the content-type doesn't match. Your sitemesh.xml file contains the following entry:

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

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

In other words, the decorator will only be invoked if the response content-type is text/html.

您说过,如果将其指向不通过Spring的路径,它将起作用,我认为这是因为Spring更改了内容类型,因此绕过了装饰器.

You said that it works if you point it at a path that does not go through Spring, and I think that's because Spring is changing the content-type, and is therefore bypassing the decorator.

尝试将以下其他条目添加到sitemesh.xml:

Try adding the following additional entry to sitemesh.xml:

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

请注意添加到内容类型的charset. Spring MVC在内容类型方面非常讲究,我怀疑它正在将其更改为包含字符集的内容.如果您的本地字符集不是ISO-8859-1,请尝试该操作.您可以根据需要添加任意多个<parser>条目.

Note the charset added to the content-type. Spring MVC is pretty fastideous with content-types, and I suspect it's changing it to something that includes the charset. If your local charset is something other than ISO-8859-1, then try that. You can add as many <parser> entries as you like.

这篇关于与Spring MVC集成sitemesh和tile 2.1的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆