首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将Sitemesh 3与Spring MVC 3集成?

如何将Sitemesh 3与Spring MVC 3集成?
EN

Stack Overflow用户
提问于 2013-02-08 23:18:01
回答 3查看 14.1K关注 0票数 4

我正在尝试使用Sitemesh 3来控制来自Spring MVC应用程序的JSP输出的修饰。

当我访问应用程序时,Sitemesh似乎正在向Spring servlet发出请求,试图检索它的装饰器文件。这可能是,也可能不是正确的行为,但它让我头疼不已。

我对Sitemesh 3的理解是它在Spring之后工作,也就是在响应对象上。

我在浏览器和日志中得到的错误是404 (配置/代码如下):

代码语言:javascript
复制
INFO: Server startup in 1367 ms
DEBUG: org.springframework.web.servlet.DispatcherServlet - DispatcherServlet with name 
'springiness' processing GET request for [/clientmanager/]^M
DEBUG: 
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - 
Looking up handler method for path /^M
DEBUG: org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - 
Returning handler method [public java.lang.String 
uk.co.hermes.HomeController.home(java.util.Locale,org.springframework.ui.Model)]^M
DEBUG: org.springframework.beans.factory.support.DefaultListableBeanFactory - Returning 
cached instance of singleton bean 'homeController'^M
DEBUG: org.springframework.web.servlet.DispatcherServlet - Last-Modified value for 
[/clientmanager/] is: -1^M
INFO : uk.co.hermes.HomeController - Welcome home! The client locale is en_GB.^M
DEBUG: org.springframework.beans.factory.support.DefaultListableBeanFactory - Invoking     
afterPropertiesSet() on bean with name 'home'^M
DEBUG: org.springframework.web.servlet.DispatcherServlet - Rendering view   
[org.springframework.web.servlet.view.JstlView: name 'home'; URL [/WEB- 
INF/jsp/home.jsp]] in DispatcherServlet with name 'springiness'^M
DEBUG: org.springframework.web.servlet.view.JstlView - Added model object 'serverTime'  
of type [java.lang.String] to request in view with name 'home'^M
DEBUG: org.springframework.web.servlet.view.JstlView - Forwarding to resource [/WEB-  
INF/jsp/home.jsp] in InternalResourceView 'home'^M
DEBUG: org.springframework.web.servlet.DispatcherServlet - Successfully completed  
request^M
DEBUG: org.springframework.web.servlet.DispatcherServlet - DispatcherServlet with name 
'springiness' processing GET request for [/clientmanager/WEB- 
INF/decorators/mainDecorator.html]^M
DEBUG:  
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping -  
Looking up handler method for path /WEB-INF/decorators/mainDecorator.html^M
DEBUG:  
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping -  
Did not find handler method for [/WEB-INF/decorators/mainDecorator.html]^M
WARN : org.springframework.web.servlet.PageNotFound - No mapping found for HTTP request 
with URI [/clientmanager/WEB-INF/decorators/mainDecorator.html] in DispatcherServlet 
with name 'springiness'^M
DEBUG: org.springframework.web.servlet.DispatcherServlet - Successfully completed request^M

我怀疑这是我的web.xml和我如何定义映射(URL)的问题:

代码语言:javascript
复制
<servlet>
    <servlet-name>springiness</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>springiness</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

<filter>
    <filter-name>sitemeshfilter</filter-name>
    <filter-class>uk.co.hermes.filters.SitemeshFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>sitemeshfilter</filter-name>
    <!-- leaving SitemeshFilter class to decide which responses it should decorate -->
    <url-pattern>/*</url-pattern>
</filter-mapping>

我的自定义过滤器:

代码语言:javascript
复制
public class SitemeshFilter extends ConfigurableSiteMeshFilter {

private Logger log = LoggerFactory.getLogger(SitemeshFilter.class);

/**
 * See http://wiki.sitemesh.org/display/sitemesh3/Configuring+SiteMesh+3
 */
@Override
protected void applyCustomConfiguration(SiteMeshFilterBuilder builder) {
log.debug("** hit the sitemesh filter");
        // apply this decorator (template) to the path defined...
        builder.addDecoratorPath("/*", "/WEB-INF/decorators/mainDecorator.html");

        // ... when the response type matches one of these 
        builder.setMimeTypes("text/html", "application/xhtml+xml", "application/vnd.wap.xhtml+xml");

}}

WEB-INF/ |-jsp |-home.jsp |-装饰器|-mainDecorator.html

和我的超级简单控制器:

代码语言:javascript
复制
    @RequestMapping(value = "/", method = RequestMethod.GET)
public String home(Locale locale, Model model) {
    logger.info("Welcome home! The client locale is {}.", locale);

    Date date = new Date();
    DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale);

    String formattedDate = dateFormat.format(date);

    model.addAttribute("serverTime", formattedDate );

    return "home";
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-07-17 09:16:39

由于没有人发布实际内容,因此您可以访问以下内容:

pom.xml add中:

代码语言:javascript
复制
<dependency>
    <groupId>org.sitemesh</groupId>
    <artifactId>sitemesh</artifactId>
    <version>3.0.0</version>
</dependency>

WEB-INF/web.xml†中添加:

代码语言:javascript
复制
<filter>
    <filter-name>sitemesh</filter-name>
    <filter-class>org.sitemesh.config.ConfigurableSiteMeshFilter</filter-class>
</filter>

<filter-mapping>
    <filter-name>sitemesh</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

WEB-INF/sitemesh3.xml add中:

代码语言:javascript
复制
<sitemesh>
    <mapping path="/*" decorator="/WEB-INF/decorator1.jsp"/>
</sitemesh>

WEB-INF/decorator1.jsp add中:

代码语言:javascript
复制
<html>
    <head>
    ...
    </head>
    <body>
        <sitemesh:write property='body'/>
    </body>
</html>

如果使用Spring Security,†会将其放在Spring Security过滤器链下面。

票数 10
EN

Stack Overflow用户

发布于 2013-07-12 07:37:26

下面的another blog展示了Sitemesh 3和Spring MVC之间的集成

票数 2
EN

Stack Overflow用户

发布于 2013-06-19 06:07:27

在我的例子中,我使用了这个小tutorial来让它工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14775670

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档