1

sitemesh と tiles 2.1 を spring mvc と統合することは可能ですか? レイアウトをタイルで合成して、サイトメッシュで飾りたい。

そんなタイルを使っていました。

   <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 でサイトメッシュを構成します。

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

1 に答える 1

1

SiteMesh は少し壊れやすく、そこから多くのログ情報を取得できないため、実際に何かが起こっているかどうかを判断するのは難しい場合があります.

content-type が一致しないため、デコレータがバイパスされていると思います。ファイルsitemesh.xmlには次のエントリが含まれています。

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

つまり、レスポンスの content-type が の場合にのみ、デコレータが呼び出されますtext/html

Spring を経由しないパスを指定すると機能するとおっしゃいましたが、それは Spring が content-type を変更しているため、デコレータをバイパスしているためだと思います。

次の追加エントリを に追加してみてくださいsitemesh.xml

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

charsetcontent-type に が追加されていることに注意してください。Spring MVC は content-types にかなりこだわりがあり、文字セットを含むものに変更しているのではないかと思います。ローカルの文字セットが 以外の場合はISO-8859-1、それを試してください。<parser>エントリはいくつでも追加できます。

于 2010-05-17T19:13:16.533 に答える