You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@struts.apache.org by "Stone, Sam" <ss...@constantcontact.com> on 2007/01/02 23:18:38 UTC

A little help please

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:sstone@constantcontact.com] 
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:ddewolf@gmail.com] 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:ddewolf@gmail.com] 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: dev-unsubscribe@struts.apache.org
>> For additional commands, e-mail: dev-help@struts.apache.org
>>
>>
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@struts.apache.org
> For additional commands, e-mail: dev-help@struts.apache.org
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@struts.apache.org
> For additional commands, e-mail: dev-help@struts.apache.org
> 
> 

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@struts.apache.org
For additional commands, e-mail: dev-help@struts.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@struts.apache.org
For additional commands, e-mail: dev-help@struts.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@struts.apache.org
For additional commands, e-mail: dev-help@struts.apache.org


Re: A little help please

Posted by "David H. DeWolf" <dd...@apache.org>.
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:sstone@constantcontact.com] 
> 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:ddewolf@gmail.com] 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:ddewolf@gmail.com] 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: dev-unsubscribe@struts.apache.org
>>> For additional commands, e-mail: dev-help@struts.apache.org
>>>
>>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: dev-unsubscribe@struts.apache.org
>> For additional commands, e-mail: dev-help@struts.apache.org
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: dev-unsubscribe@struts.apache.org
>> For additional commands, e-mail: dev-help@struts.apache.org
>>
>>
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@struts.apache.org
> For additional commands, e-mail: dev-help@struts.apache.org
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@struts.apache.org
> For additional commands, e-mail: dev-help@struts.apache.org
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@struts.apache.org
> For additional commands, e-mail: dev-help@struts.apache.org
> 
> 

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@struts.apache.org
For additional commands, e-mail: dev-help@struts.apache.org