0

Spring mvc 3.0.5 sitemesh2.4.2.myコンテナはtomcat6.0.26を使用して、Webサイトで複数のulr-patternを有効にするのに苦労しています。私のpomは次のようになります。

 <dependency>
   <groupId>org.freemarker</groupId>
     <artifactId>freemarker</artifactId>
            <version>2.3.14</version>
 </dependency>
 <dependency>
   <groupId>opensymphony</groupId>
      <artifactId>sitemesh</artifactId>
          <version>2.4.2</version>
            <scope>compile</scope>
 </dependency>
  <dependency>
    <groupId>javax.servlet.jsp</groupId>
      <artifactId>jsp-api</artifactId>
      <version>2.1</version>
      <scope>provided</scope>
  </dependency>
  <dependency>
      <groupId>javax.servlet</groupId>
       <artifactId>servlet-api</artifactId>
          <version>2.5</version>
          <scope>provided</scope>
  </dependency>

アプリケーションの管理サイトにZKである別のビューテクノロジーを使用しています。

sitemeshが処理し/site/*/admin/*すべてがうまくいくようにすることになっています。今週まで、app.amにモバイルwapビューを追加したかったのですが、この種のサイトリダイレクトは提供されていません。m.mysite.comまたはmysite.mobispring mvcリクエストマッピングを使用して、 /wap/* どのポイントを指定するかを指定しています。と同じコントローラーとアクション/site/*。だから私の問題は、sitemeshに/wap/*も処理するように指示することです。

私のweb.xmlは次のようになります。

<servlet>
    <servlet-name>sitemesh-freemarker</servlet-name>
    <servlet-class>freemarker.ext.servlet.FreemarkerServlet</servlet-class>
    <init-param>
        <param-name>TemplatePath</param-name>
        <param-value>/WEB-INF/ui/views</param-value>
    </init-param>
    <init-param>
        <param-name>NoCache</param-name>
        <param-value>true</param-value>
    </init-param>
    <init-param>
        <param-name>ContentType</param-name>
        <param-value>text/html; charset=UTF-8</param-value>
        <!-- Forces UTF-8 output encoding! -->
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<!--  FreeMaker section   -->



<servlet-mapping>
    <servlet-name>sitemesh-freemarker</servlet-name>
    <url-pattern>*.ftd</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>sitemesh-freemarker</servlet-name>
    <url-pattern>*.ftl</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>sitemesh-freemarker</servlet-name>
    <url-pattern>*.html</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>sitemesh-freemarker</servlet-name>
    <url-pattern>*.dec</url-pattern>
</servlet-mapping>

<!--  End FreeMaker section  -->



<!-- Sitemesh -->

<filter>
    <filter-name>sitemesh</filter-name>
    <filter-class>com.opensymphony.sitemesh.webapp.SiteMeshFilter</filter-class>
</filter>
<!--  Sitemesh   -->
<filter-mapping>
    <filter-name>sitemesh</filter-name>
    <url-pattern>/site/*</url-pattern> <!--this is decorated-->
    <url-pattern>/wap/*</url-pattern> <!--this is not -->
    <!--<dispatcher>FORWARD</dispatcher>-->
    <!--<dispatcher>REQUEST</dispatcher>-->
</filter-mapping>

<!--this bellow doesn't work as page not decorated-->
<!--<filter-mapping>-->
    <!--<filter-name>sitemesh</filter-name>-->
    <!--<url-pattern>/wap/*</url-pattern>-->
<!--</filter-mapping>-->
<!-- End of Sitemesh   -->

coderanchによると、sitemeshに関するものではありませんが、両方とも機能するはずです。siteMeshFilter実装しているので問題ないと思いますjavax.servlet.Filter

これは私のHomeControllerアクションです

@RequestMapping("/")
public String index(HttpServletRequest request) {
    final org.springframework.mobile.device.Device device = DeviceUtils.getCurrentDevice(request);

    if(device.isMobile()){
        return "redirect:/site/waphome";
    } else {
        return "redirect:/site/home";
    }

}


@RequestMapping(value = {"/site","/site/home","/site/home","/wap","/wap/","/wap/home"})
public String home(Model model, HttpServletRequest request, HttpSession session) {
    final org.springframework.mobile.device.Device device = DeviceUtils.getCurrentDevice(request);

   // ....

    if(device.isMobile()){
        return "waphome";
    } else {
        return "home";
    }

}
4

1 に答える 1

0

気にしないで、パターンをdecorator.xmlに入れるのを忘れていました

于 2012-05-29T19:45:34.930 に答える