SWF-1053 Apply fix to ensure cascaded attributes are inherited

This commit is contained in:
Rossen Stoyanchev
2010-07-11 23:37:04 +00:00
parent 7b9589c1b6
commit 5de788d396
2 changed files with 32 additions and 1 deletions

View File

@@ -124,7 +124,9 @@ public class AjaxTilesView extends TilesView {
throw new ServletException("No tiles attribute with a name of '" + fragmentsToRender[i] throw new ServletException("No tiles attribute with a name of '" + fragmentsToRender[i]
+ "' could be found for the current view: " + this); + "' could be found for the current view: " + this);
} else { } else {
container.render(attributeToRender, new Object[] { request, response }); container.startContext(request, response).inheritCascadedAttributes(compositeDefinition);
container.render(attributeToRender, request, response);
container.endContext(request, response);
} }
} }
} else { } else {

View File

@@ -3,6 +3,7 @@ package org.springframework.js.ajax.tiles2;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import junit.framework.Assert;
import junit.framework.TestCase; import junit.framework.TestCase;
import org.apache.tiles.Attribute; import org.apache.tiles.Attribute;
@@ -11,6 +12,7 @@ import org.apache.tiles.Definition;
import org.apache.tiles.context.TilesRequestContext; import org.apache.tiles.context.TilesRequestContext;
import org.apache.tiles.context.TilesRequestContextFactory; import org.apache.tiles.context.TilesRequestContextFactory;
import org.apache.tiles.impl.BasicTilesContainer; import org.apache.tiles.impl.BasicTilesContainer;
import org.apache.tiles.preparer.ViewPreparer;
import org.apache.tiles.servlet.context.ServletTilesRequestContextFactory; import org.apache.tiles.servlet.context.ServletTilesRequestContextFactory;
import org.apache.tiles.servlet.context.ServletUtil; import org.apache.tiles.servlet.context.ServletUtil;
import org.springframework.js.ajax.SpringJavascriptAjaxHandler; import org.springframework.js.ajax.SpringJavascriptAjaxHandler;
@@ -100,6 +102,24 @@ public class AjaxTilesViewTests extends TestCase {
assertEquals("/WEB-INF/searchNavigation.jsp", response.getForwardedUrl()); assertEquals("/WEB-INF/searchNavigation.jsp", response.getForwardedUrl());
} }
public void testRenderFragment_InheritCascadedAttribute() throws Exception {
BasicTilesContainer container = (BasicTilesContainer) ServletUtil.getCurrentContainer(request, servletContext);
ServletTilesRequestContextFactory tilesRequestContextFactory = new ServletTilesRequestContextFactory();
tilesRequestContextFactory.init(new HashMap());
TilesRequestContext tilesRequestContext = tilesRequestContextFactory.createRequestContext(container
.getApplicationContext(), new Object[] { request, response });
Definition definition = container.getDefinitionsFactory().getDefinition("search.body", tilesRequestContext);
definition.setPreparer("org.springframework.js.ajax.tiles2.AjaxTilesViewTests$AttributeTestingPreparer");
setupStaticWebApplicationContext();
request.addHeader("Accept", SpringJavascriptAjaxHandler.AJAX_ACCEPT_CONTENT_TYPE);
request.addParameter("fragments", "body");
ajaxTilesView.setUrl("search");
ajaxTilesView.afterPropertiesSet();
ajaxTilesView.renderMergedOutputModel(new HashMap(), request, response);
assertTrue(AttributeTestingPreparer.invoked);
}
public void testRenderFragment_DynamicAttribute() throws Exception { public void testRenderFragment_DynamicAttribute() throws Exception {
BasicTilesContainer container = (BasicTilesContainer) ServletUtil.getCurrentContainer(request, servletContext); BasicTilesContainer container = (BasicTilesContainer) ServletUtil.getCurrentContainer(request, servletContext);
Object[] requestItems = new Object[] { request, response }; Object[] requestItems = new Object[] { request, response };
@@ -149,4 +169,13 @@ public class AjaxTilesViewTests extends TestCase {
assertEquals("f3", fragments[2]); assertEquals("f3", fragments[2]);
} }
public static class AttributeTestingPreparer implements ViewPreparer {
public static boolean invoked;
public void execute(TilesRequestContext tilesContext, AttributeContext attributeContext) {
invoked = true;
Assert.assertTrue(attributeContext.getAttribute("searchNavigation") != null);
}
}
} }