今天又再一次配置了一个小小的练习项目,在配置sitemesh的过程中,总结了一下对sitemesh需要注意的几点。
具体的jar包不再累述。网上实在太多。把需要的都放入lib中就好。
我今天配置的问题是出在web.xml的配置中。
web.xml配置
<filter> <filter-name>struts2-clean</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareFilter</filter-class> </filter> <filter> <filter-name>sitemesh</filter-name> <filter-class>com.opensymphony.module.sitemesh.filter.PageFilter</filter-class> </filter> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsExecuteFilter</filter-class> </filter> <!--下面的sitemesh一定要注意放在struts2-clean与struts2之间 --> <filter-mapping> <filter-name>struts2-clean</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>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/struts/*</url-pattern> </filter-mapping>
这个配置与我第一次的配置有点小的出入。将strut2的filter-class由原来的org.apache.struts2.dispatcher.ng.filter .StrutsPrepare AndExecuteFilter这一个配置分成了struts-clean的StrutsPrepareFilter 与struts2的StrutsExecuteFilter 这两个filter。所以当我配置这次sitemesh时没有注意到顺序问题。将sitemesh配置在最后,所以在我做好配置启动后却无法看到sitemesh的效果。
这种很低级的错误也是我这种新人常常不注意的地方。
decorator.xml配置没有什么多说的。
<decorators defaultdir="/WEB-INF/struts-view/decorator"> <!-- 不需要装饰的页面放在这里面 --> <excludes> </excludes> <decorator name="main" page="decorator.jsp"> <pattern>*</pattern> </decorator> </decorators>
sitemesh.xml配置(可选)
<sitemesh> <property name="decorators-file" value="/WEB-INF/decorators/decorators.xml"/> <excludes file="${decorators-file}"/> <page-parsers> <parser default="true" class="com.opensymphony.module.sitemesh.parser.FastPageParser"/> <parser content-type="text/html" class="com.opensymphony.module.sitemesh.parser.FastPageParser"/> <parser content-type="text/html;charset=ISO-8859-1" class="com.opensymphony.module.sitemesh.parser.FastPageParser"/> </page-parsers> <decorator-mappers> <mapper class="com.opensymphony.module.sitemesh.mapper.ConfigDecoratorMapper"> <param name="config" value="${decorators-file}"/> </mapper> </decorator-mappers> </sitemesh>
没有特别改动的话应该是没有问题了。关键在于web.xml中的顺序问题,稍加注意就好了。