Search code examples
springjspspring-mvcapache-tiles

Getting this error while working on Spring MVC and Apache tiles


I am not sure where the error is.

message

Request processing failed; nested exception is org.apache.tiles.impl.CannotRenderException:
    org.apache.tiles.util.TilesIOException: 
        JSPException including path '/WEB-INF/views/hotels/enterBookingInfo.jsp'.

description The server encountered an internal error that prevented it from fulfilling this request.

exception

org.springframework.web.util.NestedServletException:
    Request processing failed; nested exception is org.apache.tiles.impl.CannotRenderException:
        org.apache.tiles.util.TilesIOException: JSPException including path '/WEB-INF/views/hotels/enterBookingInfo.jsp'.
        org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:656)
        org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:624)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
        org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
        org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77)
        org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)

root cause

org.apache.tiles.impl.CannotRenderException: org.apache.tiles.util.TilesIOException:
    JSPException including path '/WEB-INF/views/hotels/enterBookingInfo.jsp'.
    org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:692)
    org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:644)
    org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:627)
    org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:321)
    org.springframework.web.servlet.view.tiles2.TilesView.renderMergedOutputModel(TilesView.java:124)
    org.springframework.js.ajax.tiles2.AjaxTilesView.renderMergedOutputModel(AjaxTilesView.java:131)
    org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:250)
    org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1047)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:817)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:624)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77)
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)

tiles.xml defintion is as follows

<tiles-definitions>
    <definition name="enterBookingInfo" extends="standardLayout">
        <put-attribute name="body" value="/WEB-INF/views/hotels/enterBookingInfo.jsp"> </put-attribute>
    </definition>
</tiles-definitions>

Tiles configuration extract

<beans:bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles2.TilesConfigurer">
    <beans:property name="definitions">
        <beans:value>
            /WEB-INF/**/tiles.xml
        </beans:value>
    </beans:property>
</beans:bean>

Solution

  • I got this resolved by setting the commandName attribute of the form to the name of the modelAttribute object used in my controller.

    I also had to modify the method syntax to have BindingResult parameter which had to follow the ModelAttribute object.

    public String ultimateBooking(@RequestParam("hotelId") String hotelId,@ModelAttribute("booking") Booking bookingValidation,BindingResult result,ModelMap model)
    

    No changes were made to tile.xml