【问题标题】:Tiles 3 view resolver issue with Spring 3.2 mvcTiles 3 使用 Spring 3.2 mvc 查看解析器问题
【发布时间】:2014-01-02 03:19:12
【问题描述】:

我是 Tiles 和 Spring MVC 的新手。我的显示有问题(我查看了几个类似的问题,但没有找到“我的问题”的解决方案)。 这是我的“tiles-servlet.xml”配置(尝试使用UrlBasedViewResolverTilesViewResolver)。

....
<bean id="viewResolver" class="org.springframework.web.servlet.view.tiles3.TilesViewResolver">  
    <property name="viewClass">  
        <value>org.springframework.web.servlet.view.tiles3.TilesView</value>  
    </property>  
</bean>

<bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles3.TilesConfigurer">  
    <property name="definitions">
        <list>
            <value>/WEB-INF/tiles.xml</value>
            <value>/WEB-INF/tiles-booking.xml</value>
        </list>  
    </property>  
</bean> 
....

我的 'tiles.xml' 包含 Tiles 定义

<?xml version="1.0" encoding="UTF-8" ?>  
<!DOCTYPE tiles-definitions PUBLIC  "-//Apache Software Foundation//DTD Tiles Configuration 3.0//EN"  "http://tiles.apache.org/dtds/tiles-config_3_0.dtd">
<tiles-definitions>  
    <definition name="base.definition" template="/WEB-INF/tiles/template/defaultLayout.jsp">  
        <put-attribute name="title" value="" />  
        <put-attribute name="header" value="/WEB-INF/tiles/template/defaultHeader.jsp" />  
        <put-attribute name="search" value="/WEB-INF/search/searchCriteria.jsp" />  
        <put-attribute name="searchResults" value="/WEB-INF/search/searchResults.jsp" />  
        <put-attribute name="unitDetails" value="/WEB-INF/search/unitDetails.jsp" />  
        <put-attribute name="footer" value="/WEB-INF/tiles/template/defaultFooter.jsp" />  
        <put-attribute name="body" value="/WEB-INF/tiles/template/defaultContent.jsp" />  
    </definition>

    <definition name="indexPage" template="/WEB-INF/tiles/template/simpleLayout.jsp">
        <put-attribute name="header" value="/WEB-INF/tiles/template/defaultHeader.jsp" />  
        <put-attribute name="title" value="Welcome to Venue Bookings" />
        <put-attribute name="indexPage" value="/WEB-INF/jsp/indexPage.jsp" />  
        <put-attribute name="footer" value="/WEB-INF/tiles/template/defaultFooter.jsp" />  
    </definition>

    <definition name="searchForm" extends="base.definition">
        <put-attribute name="title" value="Search form" />  
        <put-attribute name="search" value="/WEB-INF/search/searchCriteria.jsp" />  
        <put-attribute name="searchResults" value="/WEB-INF/search/searchResults.jsp" />  
        <put-attribute name="unitDetails" value="/WEB-INF/search/unitDetails.jsp" />  
    </definition>  

    <definition name="bookConfirmationForm" extends="/WEB-INF/tiles/template/bookingLayout.jsp">
        <put-attribute name="title" value="Booking Confirmation" />  
        <put-attribute name="booking" value="/WEB-INF/search/configmBooking.jsp" />  
    </definition>  

</tiles-definitions>

我已经所有定义了指定的 JSP 文件,这些文件正在工作并且可用。所有这些都已经安静地工作了一段时间,没有问题。但是,昨天我定义显示一个新的预订页面。我面临错误:

  • 当我评论定义“bookConfirmationForm”时(如上), 一切正常。奇怪,如果我启用这个定义,我面临 主页本身的问题('indexPage' 视图是我的开始 页)。
  • 当我评论上述定义时,一切正常,直到我 达到上述观点,显然,它在那里失败了。

这是一个例外:

org.apache.jasper.JasperException: javax.servlet.ServletException: Could not resolve view with name 'indexPage' in servlet with name 'tiles'
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:585)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:455)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
root cause: javax.servlet.ServletException: Could not resolve view with name 'indexPage' in servlet with name 'tiles'
    org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1190)

最后,我的控制器方法:

@RequestMapping(value = "/index")
public ModelAndView indexPage() {
    Map<String, Object> model = new HashMap<String, Object>();
    ....
    model.put("command", new SearchCriteriaBean());
    return new ModelAndView("indexPage", model);
}

@RequestMapping(value = "/checkAvailability", method = RequestMethod.GET)
public ModelAndView checkAvailability(@ModelAttribute("agreedBookingRequest") 
    UnitBookingAgreementBean agreedBookingRequest, HttpSession session) {
    .....
        return new ModelAndView("bookConfirmationForm", model);
}

我认为这个错误一定是一个愚蠢的错误,但我无法弄清楚。我也尝试过使用 tiles2,但这没有帮助。

【问题讨论】:

  • 已更正:tiles-booking.xml 是我原始查询中的拼写错误。我只配置了tiles.xml 文件。 /WEB-INF/tiles.xml

标签: spring spring-mvc tiles-3


【解决方案1】:

“bookConfirmationForm”定义的extends="/WEB-INF/tiles/template/bookingLayout.jsp" 对我来说看起来很奇怪(&lt;definition name="bookConfirmationForm" extends="/WEB-INF/tiles/template/bookingLayout.jsp"&gt;)。我只知道extends 参数可以使用逻辑名称,但不能使用文件名。

我猜你想改写extends="base.definition",或者想使用template参数:

<definition name="bookConfirmationForm" extends="base.definition">
    <put-attribute name="title" value="Booking Confirmation" />  
    <put-attribute name="booking" value="/WEB-INF/search/configmBooking.jsp" />  
</definition>  

<!-- or -->

<definition name="bookConfirmationForm" template="/WEB-INF/tiles/template/bookingLayout.jsp">
    <put-attribute name="title" value="Booking Confirmation" />  
    <put-attribute name="booking" value="/WEB-INF/search/configmBooking.jsp" />  
</definition>  

【讨论】:

  • 感谢拉尔夫,改变奏效了。你真好。坦白说,我错过了。
  • @AnandVemula:我很高兴问题得到解决。如果解决方案对您的问题有效,那么在 stackoverflow 上表示感谢的常用方法是接受答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多