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.在我请求用户/注册后,该jsp页面没有任何装饰.

最佳答案 将您的模式更改为

<pattern>/*</pattern>

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

您可以使SiteMeshFilter仅用于转发请求

<filter-mapping>
    <filter-name>sitemesh</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>FORWARD</dispatcher>
</filter-mapping>
点赞