I'm in a JSP that's NOT invoked by tiles. I'm looking for a certain attribute and, if found, I want to do a <tiles:insertDefinition template="<%=my_attribute%>"/>.
Here is my code that works with the Sep2006 snapshot: <% String sTilesDefName = (String) request.getAttribute("tile_name"); TilesContext tilesContext = new ServletTilesContext(session.getServletContext(), request, response); ComponentDefinition componentDefinition = TilesUtil.getDefinition(sTilesDefName, tilesContext); String sSpecialPage = (String) componentDefinition.getAttribute("SpecialPage"); boolean hasCodePage = sSpecialPage!= null && sSpecialPage.length() > 0; %> <c_rt:choose> <c_rt:when test='<%=hasCodePage%>'> <tiles:insert template="<%=sSpecialPage%>" ignore="true"/> </c_rt:when> <c_rt:otherwise> <tiles:insert name="<%=sTilesDefName%>" ignore="true"/> </c_rt:otherwise> </c_rt:choose> This is all working fine. I just can't quite figure out how to do this with the new Tiles 2 codebase. Sam -----Original Message----- From: David H. DeWolf [mailto:[EMAIL PROTECTED] On Behalf Of David H. DeWolf Sent: Tuesday, January 02, 2007 7:24 PM To: Struts Developers List Subject: Re: A little help please The component context is not used to retrieve attributes for a given definition - it is used to define and retrieve information about the currently executing environment. If you need to MODIFY a definition you can try to utilize the MutableTilesContainer interface. Perhaps what you're asking for is not supported. . .what is the use case? What specifically are you trying to accomplish by accessing the definition's attribute? David Stone, Sam wrote: > Still having trouble grabbing an attribute from a tiles definition. I > was doing this OK with Sep 06 code like so: > > String sTilesDefName = (String) request.getAttribute("tile_name"); > TilesContext tilesContext = new > ServletTilesContext(session.getServletContext(), request, response); > > ComponentDefinition componentDefinition = > TilesUtil.getDefinition(sTilesDefName, tilesContext); > > String sMyAtribute = (String) > componentDefinition.getAttribute("myAttribute"); > > String sTilesDefName = (String) > request.getAttribute(RovingNavServlet.ATTR_ACTIVEPAGE); > > > David DeWolfe suggested I try the following: > >> TilesContainer container = TilesAccess.getContainer(context); >> ComponentContext ctx = container.getComponentContext(req, res); >> ComponentAttribute attr = ctx.getAttribute(name); > > I did this but I find that attr is always null. Containter and ctx > appear to be valid objects. > > So I modified my code a bit including checking to see if the container > was really recognizing my definition (isValidDefinition). It is. If I > give the name of any existing definition then it returns true. If I give > it a name not in my tiles-defs then it returns false. > > Ctx.getAttributeNames is coming back with no attributes (i.e. my while > (it.hasNext()) loop never executes). So I'm still stuck. > > Following is my current code: > > try > { > TilesContainer container = > TilesAccess.getContainer(session.getServletContext()); > > String sTilesDefName = (String) request.getAttribute("tile_name"); > if (container.isValidDefinition(request, response, sTilesDefName)) > System.out.println("valid definition"); > else > System.out.println("invalid definition"); > > ComponentContext ctx = container.getComponentContext(pageContext); > System.out.println("->ctx=" + ctx); > > Iterator it = ctx.getAttributeNames(); > int i=0; > while (it.hasNext()) > System.out.println("->" + i++); > } > catch (Exception e) > { > System.out.println(e); > } > > > Sam > ------------------------------------------------ > > -----Original Message----- > From: Stone, Sam [mailto:[EMAIL PROTECTED] > Sent: Tuesday, January 02, 2007 1:28 PM > To: Struts Developers List > Subject: RE: How to access componentDefinition? > > In your example: > > TilesContainer container = TilesAccess.getContainer(context); > ComponentContext ctx = container.getComponentContext(req, res); > ComponentAttribute attr = ctx.getAttribute(name); > > ctx comes back with no attributes (therefore attr results in null). > > I think I want to call getContainer with pageContext. How do I get the > pageContext? > > To recap what I WAS doing with the old API - I was inspecting a tiles > definition and searching for a specific attribute. I'm doing this BEFORE > dispatching to the tiles servlet. > > Sam > > -----Original Message----- > From: David H. DeWolf [mailto:[EMAIL PROTECTED] On Behalf Of David H. > DeWolf > Sent: Tuesday, January 02, 2007 10:36 AM > To: Struts Developers List > Subject: Re: How to access componentDefinition? > > potentially . . .it depends on your environment. My guess is that from > your example the answer is yes. > > David > > Stone, Sam wrote: >> TilesContainer container = TilesAccess.getContainer(context); >> >> Is "context" the servletContext? >> >> -----Original Message----- >> From: David H. DeWolf [mailto:[EMAIL PROTECTED] On Behalf Of David H. >> DeWolf >> Sent: Tuesday, January 02, 2007 10:30 AM >> To: Struts Developers List >> Subject: Re: How to access componentDefinition? >> >> Hi Sam: >> >> Everything is now done through the container. >> >> Try something like this: >> >> TilesContainer container = TilesAccess.getContainer(context); >> ComponentContext ctx = container.getComponentContext(req, res); >> ComponentAttribute attr = ctx.getAttribute(name); >> >> >> David >> >> Stone, Sam wrote: >>> Using the API from Sep 2006 I was able to access externally an >> attribute >>> from a tiles definition as follows: >>> >>> String sTilesDefName = (String) request.getAttribute("tile_name"); >>> TilesContext tilesContext = new >>> ServletTilesContext(session.getServletContext(), request, response); >>> >>> ComponentDefinition componentDefinition = >>> TilesUtil.getDefinition(sTilesDefName, tilesContext); >>> >>> String sMyAtribute = (String) >>> componentDefinition.getAttribute("myAttribute"); >>> >>> I can't quite figure out how to do this using the current Tiles 2 > API. >>> Sam >>> >>> >>> >>> --------------------------------------------------------------------- >>> To unsubscribe, e-mail: [EMAIL PROTECTED] >>> For additional commands, e-mail: [EMAIL PROTECTED] >>> >>> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: [EMAIL PROTECTED] >> For additional commands, e-mail: [EMAIL PROTECTED] >> >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: [EMAIL PROTECTED] >> For additional commands, e-mail: [EMAIL PROTECTED] >> >> > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]