我有咨询Sitemesh does not decorate returned views ,但这篇文章对我不起作用。
我希望sitemesh只装饰.jsp
页,但是当 Controller 返回一个 View 时,它没有被修饰。
这是我的 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
将我的 View 从逻辑名称解析为实际路径:<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 :
@Controller
public class UserController {
@RequestMapping("/user/registration")
public String registrationForm() {
return "user/registration";
}
}
我的
jsp
页面是/WEB-INF/jsp/user/registration.jsp
.我请求后 user/registration
,那个jsp页面没有任何装饰。
最佳答案
将您的模式更改为
<pattern>/*</pattern>
模式中的路径再次匹配请求路径,而不是内部
RequestDispatcher#forward()
由 InternalResourceViewResolver
完成 View 名称.您可以制作您的
SiteMeshFilter
仅适用于 forward
请求虽然<filter-mapping>
<filter-name>sitemesh</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
关于spring-mvc - Sitemesh 不修饰返回的 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23098555/