@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(); }
/** * 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); } } }
/** * Returns the definitions factory key. * * @param request The request object. * @return The needed factory key. */ protected String getDefinitionsFactoryKey(TilesRequestContext request) { if (keyExtractor == null) { keyExtractor = new DefaultKeyExtractor(); } return keyExtractor.getDefinitionsFactoryKey(request); } }
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);
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);
/** {@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 AttributeContext startContext(Object... requestItems) { TilesRequestContext tilesContext = getRequestContext(requestItems); return startContext(tilesContext); }
/** {@inheritDoc} */ public AttributeContext getAttributeContext(Object... requestItems) { TilesRequestContext tilesContext = getRequestContext(requestItems); return getAttributeContext(tilesContext); }
/** {@inheritDoc} */ public void endContext(Object... requestItems) { TilesRequestContext tilesContext = getRequestContext(requestItems); endContext(tilesContext); }
/** {@inheritDoc} */ public boolean isValidDefinition(String definitionName, Object... requestItems) { return isValidDefinition(getRequestContext(requestItems), definitionName); }
/** * 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(); }
/** * Releases and removes a previously created attribute context. * * @param tilesContext The request context to use. */ private void endContext(TilesRequestContext tilesContext) { popContext(tilesContext); }
/** {@inheritDoc} */ public void prepare(String preparer, Request request) { prepare(request, preparer, false); }
/** * Pushes a context object in the stack. * * @param context The context to push. * @param tilesContext The Tiles context object to use. * @since 2.0.6 */ protected void pushContext(AttributeContext context, Request tilesContext) { Deque<AttributeContext> contextStack = getContextStack(tilesContext); contextStack.push(context); }
/** {@inheritDoc} */ public boolean isValidDefinition(String definitionName, Request request) { try { Definition definition = getDefinition(definitionName, request); return definition != null; } catch (NoSuchDefinitionException nsde) { log.debug("Cannot find definition '{}'", definitionName); log.debug("Exception related to the not found definition", nsde); return false; } }
/** * Sets the request context factory. * * @param contextFactory The context factory. * @since 2.1.1 */ public void setRequestContextFactory(TilesRequestContextFactory contextFactory) { checkInit(); this.contextFactory = contextFactory; }
/** * Instantiate the container, without initialization. * * @param context The Tiles application context object. * @return The instantiated container. * @since 2.1.1 */ protected BasicTilesContainer instantiateContainer( TilesApplicationContext context) { return new BasicTilesContainer(); }
/** {@inheritDoc} */ public void endContext(Request request) { popContext(request); }
/** * Set the definitions factory. This method first ensures * that the container has not yet been initialized. * * @param definitionsFactory the definitions factory for this instance. */ public void setDefinitionsFactory(DefinitionsFactory definitionsFactory) { checkInit(); this.definitionsFactory = definitionsFactory; }