JstlUtils.exposeLocalizationContext(new RequestContext(request, servletContext)); Definition compositeDefinition = container.getDefinitionsFactory().getDefinition(getUrl(), tilesRequest); + "' could be found for the current view: " + this); container.startContext(tilesRequest).inheritCascadedAttributes(compositeDefinition); container.render(attributeToRender, tilesRequest); container.endContext(tilesRequest);
/** * Iterate over dynamically added Tiles attributes (see "Runtime Composition" * in the Tiles documentation) and add them to the output Map passed as input. * * @param container the Tiles container * @param tilesRequest the Tiles request * @param resultMap the output Map where attributes of interest are added to. */ protected void addRuntimeAttributes(BasicTilesContainer container, Request tilesRequest, Map<String, Attribute> resultMap) { AttributeContext attributeContext = container.getAttributeContext(tilesRequest); Set<String> attributeNames = new HashSet<>(); if (attributeContext.getLocalAttributeNames() != null) { attributeNames.addAll(attributeContext.getLocalAttributeNames()); } if (attributeContext.getCascadedAttributeNames() != null) { attributeNames.addAll(attributeContext.getCascadedAttributeNames()); } for (String name : attributeNames) { Attribute attr = attributeContext.getAttribute(name); resultMap.put(name, attr); } } }
@Test public void simpleBootstrap() { MockServletContext servletContext = new MockServletContext(); TilesConfigurer tc = new TilesConfigurer(); tc.setDefinitions("/org/springframework/web/servlet/view/tiles3/tiles-definitions.xml"); tc.setCheckRefresh(true); tc.setServletContext(servletContext); tc.afterPropertiesSet(); ApplicationContext tilesContext = ServletUtil.getApplicationContext(servletContext); BasicTilesContainer container = (BasicTilesContainer) TilesAccess.getContainer(tilesContext); Request requestContext = new ServletRequest(container.getApplicationContext(), new MockHttpServletRequest(), new MockHttpServletResponse()); assertNotNull(container.getDefinitionsFactory().getDefinition("test", requestContext)); tc.destroy(); }
if (value.startsWith("/")) { resultMap.put(attributeName, attribute); } else if (container.isValidDefinition(value, tilesRequest)) { resultMap.put(attributeName, attribute); Definition nestedDefinition = container.getDefinitionsFactory().getDefinition(value, tilesRequest); Assert.isTrue(nestedDefinition != definition, "Circular nested definition: " + value); flattenAttributeMap(container, tilesRequest, resultMap, nestedDefinition);
private void flattenAttributeMap(BasicTilesContainer container, TilesRequestContext requestContext, Map resultMap, Definition compositeDefinition) throws Exception { Iterator i = compositeDefinition.getAttributes().keySet().iterator(); while (i.hasNext()) { Object key = i.next(); Attribute attr = (Attribute) compositeDefinition.getAttributes().get(key); Definition nestedDefinition = container.getDefinitionsFactory().getDefinition(attr.getValue().toString(), requestContext); resultMap.put(key, attr); if (nestedDefinition != null) { flattenAttributeMap(container, requestContext, resultMap, nestedDefinition); } } } }
/** * Renders the specified definition. * @param definition The definition to render. * @param request The request context. * @since 2.1.3 */ public void render(Definition definition, Request request) { AttributeContext originalContext = getAttributeContext(request); BasicAttributeContext subContext = new BasicAttributeContext(originalContext); subContext.inherit(definition); pushContext(subContext, request); try { render(request, subContext); } finally { popContext(request); } }
JstlUtils.exposeLocalizationContext(new RequestContext(request, servletContext)); TilesRequestContext tilesRequestContext = container.getContextFactory().createRequestContext( container.getApplicationContext(), new Object[] { request, response }); Definition compositeDefinition = container.getDefinitionsFactory().getDefinition(getUrl(), tilesRequestContext); Map flattenedAttributeMap = new HashMap(); + "' could be found for the current view: " + this); } else { container.render(attributeToRender, response.getWriter(), new Object[] { request, response });
/** {@inheritDoc} */ public void render(String definitionName, Object... requestItems) { TilesRequestContext requestContext = getRequestContextFactory().createRequestContext( getApplicationContext(), requestItems ); render(requestContext, definitionName); }
/** {@inheritDoc} */ public void renderContext(Object... requestItems) { TilesRequestContext request = getRequestContext(requestItems); AttributeContext attributeContext = getAttributeContext(request); render(request, attributeContext); }
/** {@inheritDoc} */ public void renderContext(Request request) { AttributeContext attributeContext = getAttributeContext(request); render(request, attributeContext); }
/** {@inheritDoc} */ public void render(String definitionName, Request request) { log.debug("Render request received for definition '{}'", definitionName); Definition definition = getDefinition(definitionName, request); if (definition == null) { throw new NoSuchDefinitionException("Unable to find the definition '" + definitionName + "'"); } render(definition, request); }
/** * Renders the specified attribute context. * * @param request The request context. * @param attributeContext The context to render. * @throws InvalidTemplateException If the template is not valid. * @throws CannotRenderException If something goes wrong during rendering. * @since 2.1.3 */ protected void render(Request request, AttributeContext attributeContext) { try { if (attributeContext.getPreparer() != null) { prepare(request, attributeContext.getPreparer(), true); } render(attributeContext.getTemplateAttribute(), request); } catch (IOException e) { throw new CannotRenderException(e.getMessage(), e); } } }
public void testRenderFragment_DynamicAttribute() throws Exception { ApplicationContext tilesAppContext = new WildcardServletApplicationContext(servletContext); Request tilesRequest = new ServletRequest(tilesAppContext, request, response); BasicTilesContainer container = (BasicTilesContainer) TilesAccess.getContainer(tilesAppContext); AttributeContext attributeContext = container.startContext(tilesRequest); attributeContext.putAttribute("body", new Attribute("/WEB-INF/dynamicTemplate.jsp")); Map<String, Attribute> resultMap = new HashMap<>(); ajaxTilesView.addRuntimeAttributes(container, tilesRequest, resultMap); assertNotNull(resultMap.get("body")); assertEquals("/WEB-INF/dynamicTemplate.jsp", resultMap.get("body").toString()); container.endContext(tilesRequest); }
/** * Instantiate the container, without initialization. * * @param context The Tiles application context object. * @return The instantiated container. * @since 2.1.1 */ protected BasicTilesContainer instantiateContainer( ApplicationContext context) { return new BasicTilesContainer(); }
/** {@inheritDoc} */ public void prepare(String preparer, Object... requestItems) { TilesRequestContext requestContext = getRequestContextFactory().createRequestContext( getApplicationContext(), requestItems ); prepare(requestContext, preparer, false); }
/** {@inheritDoc} */ public AttributeContext getAttributeContext(Object... requestItems) { TilesRequestContext tilesContext = getRequestContext(requestItems); return getAttributeContext(tilesContext); }
/** {@inheritDoc} */ public AttributeContext startContext(Object... requestItems) { TilesRequestContext tilesContext = getRequestContext(requestItems); return startContext(tilesContext); }
/** {@inheritDoc} */ public void endContext(Object... requestItems) { TilesRequestContext tilesContext = getRequestContext(requestItems); endContext(tilesContext); }
/** {@inheritDoc} */ @Deprecated public void render(Attribute attr, Writer writer, Object... requestItems) throws IOException { render(attr, requestItems); }
/** {@inheritDoc} */ public boolean isValidDefinition(String definitionName, Object... requestItems) { return isValidDefinition(getRequestContext(requestItems), definitionName); }