我咨询了
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>