1. 首先 这些jar包都去官方 下载好,包括源代码.
另外还需要struts2-sitemesh-plugin-2.1.6.jar
2. WEB-INF/web.xml 主要设置
评述:这个filter的顺序是有关系的. StrutsPrepareFilter -> FreeMarkerPageFilter -> StrutsExecuteFilter
如果不配置sitemesh-freemarker, freemarker文件就不会被解析.
<!-- SiteMesh FreeMarker --> <filter> <filter-name>struts-prepare</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareFilter</filter-class> </filter> <filter> <filter-name>sitemesh</filter-name> <filter-class>org.apache.struts2.sitemesh.FreeMarkerPageFilter</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> </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>UTF-8</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>sitemesh-freemarker</servlet-name> <url-pattern>*.action</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>sitemesh-freemarker</servlet-name> <url-pattern>*.ftl</url-pattern> </servlet-mapping>
3. WEB-INF/decorators.xml
<?xml version="1.0" encoding="UTF-8"?> <decorators defaultdir="/decorators"> <!-- Any urls that are excluded will never be decorated by Sitemesh --> <excludes> <pattern>/exclude.jsp</pattern> </excludes> <decorator name="index" page="index.ftl"> <pattern>/*</pattern> </decorator> </decorators>
4. WEB-INF/classes/struts.xml 主要配置
<action name="test_*" method="{1}" class="com.starcite.action.TestAction"> <result name="input" type="freemarker">/freemarker/register.ftl</result> <result name="success" type="freemarker">/freemarker/success.ftl</result> <result name="error" type="freemarker">/freemarker/error.ftl</result> </action>
5. com.starcite.action.TestAction.java
package com.starcite.action; import com.opensymphony.xwork2.ActionSupport; @SuppressWarnings("serial") public class TestAction extends ActionSupport { public String input() { return INPUT; } public String error() { return ERROR; } public String success() { return SUCCESS; } }
6. decorators/index.ftl
<html> <head> <title>Test - ${title}</title> ${head} </head> <body> <#include "/decorators/header.ftl"> <hr noshade="noshade" size="1"/> ${body} <hr noshade="noshade" size="1"/> <#include "/decorators/footer.ftl"> </body> </html>
7. decorators/header.ftl
自己随便写点东西.
8. decorators/footer.ftl
自己随便写点东西.
9. freemarker/success.ftl
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title><@s.text name="success"/></title> </head> <body> <@s.text name="success.info"/> </body> </html>
freemarker/error.ftl, freemarker/register.ftl 略