我咨询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页面没有任何装饰。
答案 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>