2012-11-10 44 views
1

我已經嘗試了很多,但沒有成功。 唯一的身體不是渲染。所有包含都在裝飾器中正確合併。參見結果頁面。Sitemesh3 + Freemarker,只有身體沒有渲染

功能

jdk = 1.7 
struts2 = 2.3.4.1 
sitemesh = 3.0-alpha-2 

結果頁

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<link rel="stylesheet" href="/css/bootstrap.min.css" /> 
    </head> 
    <body id="public"> 
     <div class="container"> 
      No Body 
     </div> 
    </body> 
</html> 

sitemesh3.xml

<sitemesh> 
    <mapping decorator="/WEB-INF/decorators/main.ftl"/> 
</sitemesh> 

Web.xml中

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> 

    <display-name>Struts2 SiteMesh Freemarker Web Application</display-name> 

    <listener> 
     <listener-class>org.apache.struts2.dispatcher.ng.listener.StrutsListener</listener-class> 
    </listener> 

    <filter> 
     <filter-name>sitemesh</filter-name> 
     <filter-class>org.sitemesh.config.ConfigurableSiteMeshFilter</filter-class> 
    </filter> 

    <filter> 
     <filter-name>struts-prepare</filter-name> 
     <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareFilter</filter-class> 
    </filter> 
    <filter> 
     <filter-name>struts-execute</filter-name> 
     <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsExecuteFilter</filter-class> 
    </filter> 

    <filter-mapping> 
     <filter-name>struts-prepare</filter-name> 
     <url-pattern>/*</url-pattern> 
    </filter-mapping> 
    <filter-mapping> 
     <filter-name>sitemesh</filter-name> 
     <url-pattern>/*</url-pattern> 
     <dispatcher>REQUEST</dispatcher> 
     <dispatcher>FORWARD</dispatcher> 
     <dispatcher>INCLUDE</dispatcher> 
    </filter-mapping> 
    <filter-mapping> 
     <filter-name>struts-execute</filter-name> 
     <url-pattern>/*</url-pattern> 
    </filter-mapping> 

    <servlet> 
     <servlet-name>sitemesh-freemarker</servlet-name> 
     <servlet-class>com.opensymphony.module.sitemesh.freemarker.FreemarkerDecoratorServlet</servlet-class> 
     <init-param> 
      <param-name>TemplatePath</param-name> 
      <param-value>/</param-value> 
     </init-param> 
     <init-param> 
      <param-name>default_encoding</param-name> 
      <param-value>ISO-8859-1</param-value> 
     </init-param> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 

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

    <welcome-file-list> 
     <welcome-file>index.ftl</welcome-file> 
    </welcome-file-list> 

</web-app> 

的pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.myapp</groupId> 
    <artifactId>Struts2_SiteMesh3_FreeMarker</artifactId> 
    <packaging>war</packaging> 
    <version>1.0</version> 
    <name>Struts2_SiteMesh3_FreeMarker WebApp</name> 
    <url>http://maven.apache.org</url> 

    <properties> 
     <java.version>1.7</java.version> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
     <struts2.version>2.3.4.1</struts2.version> 
     <slf4j.version>1.6.6</slf4j.version> 
     <sitemesh.version>3.0-alpha-2</sitemesh.version> 
    </properties> 

    <dependencies> 
     <dependency> 
      <groupId>javax</groupId> 
      <artifactId>javaee-web-api</artifactId> 
      <version>6.0</version> 
      <scope>provided</scope> 
     </dependency> 

     <!--Start Slf4j--> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-api</artifactId> 
      <version>${slf4j.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-simple</artifactId> 
      <version>${slf4j.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>log4j</groupId> 
      <artifactId>log4j</artifactId> 
      <version>1.2.17</version> 
     </dependency> 
     <!--End Slf4j--> 

     <!-- Start struts2 dependencies --> 
     <dependency> 
      <groupId>org.apache.struts</groupId> 
      <artifactId>struts2-core</artifactId> 
      <version>${struts2.version}</version> 
     </dependency> 
     <!-- End struts2 dependencies --> 

     <!-- Start SiteMesh dependencies --> 
     <dependency> 
      <groupId>org.apache.struts</groupId> 
      <artifactId>struts2-sitemesh-plugin</artifactId> 
      <version>${struts2.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.sitemesh</groupId> 
      <artifactId>sitemesh</artifactId> 
      <version>${sitemesh.version}</version> 
     </dependency> 
     <!-- End SiteMesh dependencies --> 

    </dependencies> 

    <build> 
     <finalName>Struts2_SiteMesh3_FreeMarker</finalName> 
    </build> 

</project> 

裝飾

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 

<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
     <#include "../include/meta.ftl"> 
    </head> 
    <body id="public"> 
     <#include "../include/navigation.ftl"> 
     <div class="container"> 
      <#include "../include/search.ftl"> 
      ${body} 
     </div> 
    </body> 
</html> 

index.ftl

<html> 
<head> 
    <title>Hello World</title> 
    <meta name='description' content='A simple page'> 
</head> 
<body> 
<p>Hello <strong>world</strong>!</p> 
</body> 
</html> 

項目結構

project

+0

實驗得出的結論很多使用後的<sitemesh:write property='body'/>代替${body} Sitemesh3不支持Freemarker。 JSP和靜態支持是100%的工作。如果有人有解決方案,請發帖。 – Pirzada

+0

作爲一邊你可以嘗試瓷磚。我會建議去瓷磚3. – Quaternion

+0

@quaternion,這個任何幫助請http://stackoverflow.com/questions/13427495/error-with-struts2-tiles3-0-0-when-navigate-from-index – Pirzada

回答

1

附加的servlet freemarker.ext.servlet.FreemarkerServlet在<url-pattern>*.ftl</url-pattern>網站XML和你decorator.ftl