Sitemesh不会修饰返回的视图

时间:2014-04-16 03:39:47

标签: spring-mvc sitemesh

我咨询Sitemesh does not decorate returned views,但这篇文章对我不起作用。

我希望sitemesh只装饰.jsp个页面,但是当控制器返回一个视图时,它不会被装饰。

这是我的web.xml

的一部分
  <filter>
    <filter-name>sitemesh</filter-name>
    <filter-class>com.opensymphony.sitemesh.webapp.SiteMeshFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>sitemesh</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

这是我的decorators.xml

<?xml version="1.0" encoding="UTF-8"?>    
<decorators>
    <decorator name="basicLayout" page="/WEB-INF/decorators/base_layout.jsp">
        <pattern>*.jsp</pattern>
    </decorator>
</decorators>

我使用InternalResourceViewResolver将我的视图从逻辑名解析为实际路径:

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
    p:viewClass="org.springframework.web.servlet.view.JstlView"
    p:prefix="/WEB-INF/jsp/"
    p:suffix=".jsp" />

这是我的控制器:

@Controller
public class UserController {
    @RequestMapping("/user/registration")
    public String registrationForm() {
        return "user/registration";
    }   
}

我的jsp页面为/WEB-INF/jsp/user/registration.jsp。在我请求user/registration之后,该jsp页面没有任何装饰。

1 个答案:

答案 0 :(得分:2)

将您的模式更改为

<pattern>/*</pattern>

模式中的路径再次与请求路径匹配,而不是由RequestDispatcher#forward()与视图名称完成的内部InternalResourceViewResolver匹配。

您可以通过

使SiteMeshFilter仅对forward个请求有效
<filter-mapping>
    <filter-name>sitemesh</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>FORWARD</dispatcher>
</filter-mapping>