[ 
https://issues.apache.org/jira/browse/TILES-544?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13262413#comment-13262413
 ] 

Nicolas Le Bas commented on TILES-544:
--------------------------------------

Well, forget my previous comment, that's not it. I was hasty and naive. 

Actually, the problem lies in 
org.springframework.web.servlet.view.tiles2.TilesView, which is not designed 
for your use case and doesn't call the proper API. 

Whenever you call TilesContainer.render(definition, ...) in an "included" 
situation, you should wrap the call in startContext/endContext like this:
{code}
TilesContainer container = TilesAccess.getContainer(getServletContext());
AttributeContext context = container.startContext(request, response);
try {
  // here you may override the definition's attributes on a 
  // per-request basis by calling 
  // context.putAttribute(name, attribute, cascade);

  container.render(definitionName, request, response);
} finally {
  container.endContext(request, response);
}
{code}
You may do it in non-included situations, too, it's just optional.

Now why is spring not doing it? Probably because you're not supposed to pass 
control back to the controller after you've started rendering the view; that 
breaks the MVC paradigm and Spring is not designed for that.

You'll probably just have to create your own TilesView by inheriting from 
Spring's in order to add the missing API calls.

                
> Stack overflow due to rendering loop when including a resource resulting in 
> another tiles view.
> -----------------------------------------------------------------------------------------------
>
>                 Key: TILES-544
>                 URL: https://issues.apache.org/jira/browse/TILES-544
>             Project: Tiles
>          Issue Type: Bug
>    Affects Versions: 2.2.2
>         Environment: Spring MVC 3.1.1
>            Reporter: Viktor Hedefalk
>         Attachments: tiles-stackoverflow.txt
>
>
> I get a stackoverflow because of a rendering loop when including an call to a 
> controller with a view is also a tile. This is a dup of TILES-418, but since 
> that one was closed and I couldn't attach my stack trace, I'll open this new 
> one.
> To me this is very critical. I just upgraded an application from Spring 2.0.7 
> and old struts-tiles to Spring 3.1.1 and tiles 2.2.2 and the structure worked 
> with struts-tiles. It's kind of a homebrew portlet thingy where we iterate 
> over url:s pointing to controllers given by a cms.
> The included controller is called correctly and returns a model and view 
> where the view points to a tile definition. But when Spring gives over the 
> rendering to tiles, the loop begins.
> It doesn't matter if I include the url with:
>  <tiles:insertTemplate name="${entry.url}" />
> or
>  <c:import url="${entry.url }"  />
> the same error occurs.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to