I threw a blog together and posted a short tutorial here (http://blog.torr.redijedi.com/2007/08/t5-tab-component.html). The code as well as a jar is available through the links there. Hope someone finds this useful. I've got a couple other components that I'll probably end up throwing up there too.
On 8/1/07, Francois Armand <[EMAIL PROTECTED]> wrote: > Todd Orr wrote: > > [...] This is where I > > found Environment to be deficient. It seems that no matter what > > combination of phases of rendering I use I cannot get the data back to > > the tabnavigation before it is finished rendering and therefore cannot > > alter it's display. > Not sure that it matches what you want to do, but you could make your > tabpanel register themselves to an environment value init ialized in > tabgoup and read this env value in tabnavigation. Something like that : > (Sorry for the long post, I put all the code) > > ====================================== > > The enclosing element, for my test its a page (your tabgroup) > 8<-------------------------------------------------------------------------------------------------- > TestRegister.html > 8<------------------------- > <?xml version="1.0" encoding="UTF-8" ?> > <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" > "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> > <html xmlns="http://www.w3.org/1999/xhtml" > xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd"> > <head> > <meta http-equiv="Content-Type" content="text/html; > charset=UTF-8" /> > <title>Register and print ids</title> > </head> > <body> > > <t:printregistered/> > <t:registerid t:id="foo"/> > <t:registerid t:id="bar"/> > <t:registerid/> > <t:printregistered/> > > </body> > </html> > 8<-------------------------------------------------------------------------------------------------- > If you call contexturl/testregister, you see : > 8<-------------------------------------------------------------------------------------------------- > > No id registered in env > > I'm "foo" and should be registered. > > I'm "bar" and should be registered. > > I'm "registerid" and should be registered. > > Found these ids in env: > > * Found: foo > * Found: bar > * Found: registerid > > 8<-------------------------------------------------------------------------------------------------- > > ====================================== > ====================================== > Now, the details : > > TestRegister.java > 8<------------------------- > public class TestRegister { > @Inject > private Environment environment; > private Register register; > private String id; > > public String getId() { > return this.id; > } > > public void setId(String id) { > this.id = id; > } > > @SetupRender > void initEnv() { > register = new Register(); > environment.push(Register.class, register); > } > > @CleanupRender > void cleanup() { > environment.pop(Register.class); > } > > public List<String> getIds() { > return this.register.getRegistered(); > } > > } > 8<------------------------- > > The register object is really just here as a data container: > 8<-------------------------------------------------------------------------------------------------- > Register.jeva > 8<------------------------ > public class Register { > private List<String> registered; > > public Register() { > registered = new ArrayList<String>(); > } > > public void register(String id) { > this.registered.add(id); > } > > public List<String> getRegistered() { > return this.registered; > } > } > 8<-------------------------------------------------------------------------------------------------- > > > Component that need to register themselves (your tabpanels) : > 8<-------------------------------------------------------------------------------------------------- > RegisterId.java : > 8<------------------------ > public class RegisterId { > @Environmental > private Register register; > > @Inject > private ComponentResources resources; > > @SetupRender > void setup() { > if(register != null) { > this.register.register(resources.getId()); > } > } > > public String getId() { > return resources.getId(); > } > } > 8<------------------------ > RegisterId.html > 8<------------------------- > <p xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd"> > <t:if test="id"> > I'm "${id}" and should be registered. > <t:parameter name="else"> > I have no id and sould not be registered. > </t:parameter> > </t:if> > </p> > 8<-------------------------------------------------------------------------------------------------- > > ====================================== > > The component that need to read registered ids (your tabnavigation) > 8<-------------------------------------------------------------------------------------------------- > PrintRegistered.java > 8<------------------------- > public class PrintRegistered { > > @Environmental > private Register register; > > private String id; > > public List<String> getIds() { > return null == register ? null : register.getRegistered(); > } > > public String getId() { > return this.id; > } > > public void setId(String id) { > this.id = id; > } > } > 8<------------------------- > PrintRegistered.html > 8<------------------------- > <div xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd"> > <t:if test="ids"> > <p>Found these ids in env:</p> > <ul> > <t:loop source="ids" value="id"> > <li>Found: ${id}</li> > </t:loop> > </ul> > <t:parameter name="else"> > <p>No id registered in env</p> > </t:parameter> > </t:if> > </div> > 8<-------------------------------------------------------------------------------------------------- > > ====================================== > > Several details need to be investigate : why the first > <t:printregistered/> is empty (something to do with the render phase > order), and if you want to only have declared id, perhaps use client in > place of component id. But I think that it roughly mathc what you want > to do. > > Hope it may help ! > > -- > Francois Armand > Etudes & Développements J2EE > LINAGORA SA - http://www.linagora.com > Tél.: +33 (0)1 58 18 68 28 > ----------- > InterLDAP - http://interldap.org > FederID - http://www.federid.org/ > Open Source identities management and federation > > > --------------------------------------------------------------------- > 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]