【问题标题】:Sitemesh does not decorate returned viewSitemesh 不装饰返回的视图
【发布时间】:2014-05-30 16:23:58
【问题描述】:

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

【问题讨论】:

  • 你的sitemesh.xml文件呢?
  • @SotiriosDelimanolis,我没有sitemesh.xml
  • 您是否加入了decorators.xml?
  • @Alex,是的。如果页面没有作为视图返回,则可以对其进行装饰。

标签: spring-mvc sitemesh


【解决方案1】:

改变你的模式

<pattern>/*</pattern>

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

你可以让你的SiteMeshFilter 只处理forward 请求,但是

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

【讨论】:

  • 是的,这可以工作。但我只希望jsp页面被装饰。因为我也有一个 RESTful 接口有返回 json.
  • @FANGYishu 查看我的编辑。为Filter 设置dispatcher。
猜你喜欢
  • 2013-08-25
  • 2011-12-24
  • 2016-10-07
  • 2012-04-19
  • 2014-02-14
  • 2011-05-21
  • 2013-03-01
  • 2020-02-10
相关资源
最近更新 更多