Luther, My practice is a carry-over from T4. It could use some streamlining.
I have a Menu component class with public String getPageName(){ return _resources.getPageName(); } And then in my Menu.tml, I use the ognl binding available from the t5components library, and also the ifRole component from the tapestry5-acegi security library: <div id="menu"> <ul id="fmpnav"> <li class="dummy" ><a href="#" t:type="PageLink" page="Summary" disabled="ognl:pageName.equals('Summary')">Home</a></li> <li class="dummy" ><a href="#">Tools</a> <ul> <li class="dummy" ><a href="#" t:type="ActionLink" t:id="Logout">Logout</a> </li> <li class="dummy" > <a href="#" t:type="PageLink" t:page="PasswordChange" disabled="ognl:pageName.equals('PasswordChange')">Password Change</a> </li> </ul> </li> <t:security.ifrole role="ROLE_ADMIN"> <li> Administration<br/> <ul class="submenu"> <li> <a href="#" t:type="PageLink" t:page="admin/ItemListTypeList" disabled="ognl:pageName.equals('admin/ItemListTypeList')">ItemListTypeList</ a> </li> <li> <a href="#" t:type="PageLink" t:page="admin/ItemListTypeEdit" disabled="ognl:pageName.equals('admin/ItemListTypeEdit')">ItemListTypeEdit</ a> </li> </ul> </li> </t:security.ifrole> </ul> Jonathan > -----Original Message----- > From: Luther Baker [mailto:[EMAIL PROTECTED] > Sent: Thursday, October 02, 2008 12:51 > To: Tapestry users > Subject: Re: template dynamics > > Sorry. > > My point was to ask for suggestions. My tapestry development is in > somewhat > of a Vacuum so looking for some hints for this end goal. This process is a > bit point blank... maybe there is a better method to use on the java class > that is a part of the lifecycle of the component. As mentioned earlier, > I'm > going to look into <t:block and see how that works in this case. > > One final question: I've got a fairly standard set of top level menu > links. > I am dumping the href and label text into the messages file. At the very > least, I think I need to put the labels there - but it strikes me that > there > may be a better way to reference the hrefs a bit more dynamically. > > Anyone have any thoughts on this? So, in my layout or HtmlShell.tml file I > do this: > > <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" " > http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> > <html xmlns="http://www.w3.org/1999/xhtml" xmlns:t=" > http://tapestry.apache.org/schema/tapestry_5_0_0.xsd"> > ... > <div id="header"> > <ul class="horizRight"> > <li><t:condLink currentAnchorHref="${currentAnchorHref}" > targetAnchorHref="${message:viewNotes-anchorHref}">${message:viewNotes- > anchorLabel}</t:condLink></li> > <li><t:condLink currentAnchorHref="${currentAnchorHref}" > targetAnchorHref="${message:addNote-anchorHref}">${message:addNote- > anchorLabel}</t:condLink></li> > <li><t:condLink currentAnchorHref="${currentAnchorHref}" > targetAnchorHref="${message:home-anchorHref}">${message:home- > anchorLabel}</t:condLink></li> > </ul> > ... > </html> > > I wonder if there is a better way to find the targetAnchorHref. As noted > previously, this approach forces my basic pages to tell me who they are > when > they include the layout component. Notice the "currentAnchorHref" passed > in > here.. > > <t:htmlShell currentAnchorHref="${message:self-anchorHref}" > currentHeadTitle="${message:self-headTitle}" > currentBodyTitle="${message:self-bodyTitle}" xmlns:t=" > http://tapestry.apache.org/schema/tapestry_5_0_0.xsd" > xml:space="preserve"> > > > Again, any thoughts or suggestions are much appreciated. > > -Luther > > > > > On Thu, Oct 2, 2008 at 11:35 AM, Luther Baker <[EMAIL PROTECTED]> > wrote: > > > I wrote a small custom menu component that includes or doesn't include > an > > anchor href based on the href of the current page. > > > > I wonder if the block approach suggested here would be cleaner? I use > the > > following idiom: > > > > <t:if test="different" xmlns:t=" > > http://tapestry.apache.org/schema/tapestry_5_0_0.xsd"> > > <t:body/> > > <t:parameter name="else"> > > <t:pageLink page="${targetAnchorHref}"><t:body/></t:pageLink> > > </t:parameter> > > </t:if> > > > > to render this pseudo-dynamically (notice that 'about' has no anchor > tag): > > > > <ul> > > <li><a href="home">home</a></li> > > <li><a href="contact">contact</a></li> > > * <li>about</li> > > *</ul> > > > > > > The JAVA: > > > > public class CondLink > > { > > @Property > > @Parameter(required=true, defaultPrefix="literal") > > private String currentAnchorHref; > > > > @Property > > @Parameter(required=true, defaultPrefix="literal") > > private String targetAnchorHref; > > > > public boolean isDifferent() > > { > > return this.currentAnchorHref.equals(this.targetAnchorHref); > > } > > } > > > > > > The ConditionalLink.tml: > > > > <t:if test="different" xmlns:t=" > > http://tapestry.apache.org/schema/tapestry_5_0_0.xsd"> > > <t:body/> > > <t:parameter name="else"> > > <t:pageLink page="${targetAnchorHref}"><t:body/></t:pageLink> > > </t:parameter> > > </t:if> > > > > > > The LAYOUT - HtmlShell.tml: > > > > <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" " > > http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> > > <html xmlns="http://www.w3.org/1999/xhtml" xmlns:t=" > > http://tapestry.apache.org/schema/tapestry_5_0_0.xsd"> > > ... > > <div id="header"> > > <ul class="horizRight"> > > <li><t:condLink currentAnchorHref="${currentAnchorHref}" > > targetAnchorHref="${message:viewNotes-anchorHref}">${message:viewNotes- > anchorLabel}</t:condLink></li> > > <li><t:condLink currentAnchorHref="${currentAnchorHref}" > > targetAnchorHref="${message:addNote-anchorHref}">${message:addNote- > anchorLabel}</t:condLink></li> > > <li><t:condLink currentAnchorHref="${currentAnchorHref}" > > targetAnchorHref="${message:home-anchorHref}">${message:home- > anchorLabel}</t:condLink></li> > > </ul> > > ... > > </html> > > > > > > The PAGE: index.tml > > > > <t:htmlShell currentAnchorHref="${message:self-anchorHref}" > > currentHeadTitle="${message:self-headTitle}" > > currentBodyTitle="${message:self-bodyTitle}" xmlns:t=" > > http://tapestry.apache.org/schema/tapestry_5_0_0.xsd" > > xml:space="preserve"> > > <ul class="horizLeft"> > > <li><t:pageLink > > page="${message:add-anchorHref}">${message:add- > anchorLabel}</t:pageLink></li> > > > > <li><t:pageLink > > page="${message:view-anchorHref}">${message:view- > anchorLabel}</t:pageLink></li> > > </ul> > > </t:htmlShell> > > > > > > > > On Thu, Oct 2, 2008 at 9:19 AM, Ulrich Stärk <[EMAIL PROTECTED]> wrote: > > > >> That's a really nice solution. Have to keep that in mind. > >> > >> Uli > >> > >> Am Do, 2.10.2008, 15:49, schrieb Filip S. Adamsen: > >> > Hi, > >> > > >> > Define Blocks containing the different states you need and use a > >> > Delegate to render the block you need based on an expression. This > way > >> > you can do the whole if-then-else/switch stuff in your page class. > >> > > >> > Template: > >> > > >> > <t:block t:name="block1">...</t:block> > >> > <t:block t:name="block2">...</t:block> > >> > > >> > <t:delegate t:to="activeblock"> > >> > > >> > Class: > >> > > >> > @Inject > >> > private ComponentResources resources; > >> > > >> > public Block getActiveBlock() { > >> > String blockId = ...; > >> > return resources.getBlock(blockId); > >> > } > >> > > >> > It's also possible to have the blocks on another page, in that case > you > >> > can get the page through ComponentSource#getPage, get its > >> > ComponentResources, and go from there. > >> > > >> > http://tapestry.apache.org/tapestry5/guide/templates.html (see > <block>) > >> > > >> > http://tapestry.apache.org/tapestry5/apidocs/org/apache/tapestry5/Block.ht > ml > >> > > >> http://tapestry.apache.org/tapestry5/tapestry- > core/ref/org/apache/tapestry5/corelib/components/Delegate.html > >> > > >> > http://tapestry.apache.org/tapestry5/apidocs/org/apache/tapestry5/Componen > tResourcesCommon.html#getBlock(java.lang.String)<http://tapestry.apache.or > g/tapestry5/apidocs/org/apache/tapestry5/ComponentResourcesCommon.html#get > Block%28java.lang.String%29> > >> > > >> > http://tapestry.apache.org/tapestry5/apidocs/org/apache/tapestry5/services > /ComponentSource.html#getPage(java.lang.Class)<http://tapestry.apache.org/ > tapestry5/apidocs/org/apache/tapestry5/services/ComponentSource.html#getPa > ge%28java.lang.Class%29> > >> > > >> > -Filip > >> > > >> > On 2008-10-02 14:39, János Jarecsni wrote: > >> >> Hi Uli, > >> >> > >> >> thanks, I did not know about these. However, what if I have to > switch > >> >> between more states? If seems to be awkward in that case (if > embedding > >> >> is > >> >> possible at all). > >> >> > >> >> Thanks > >> >> Janos > >> >> > >> >> 2008/10/1 Ulrich Stärk <[EMAIL PROTECTED]> > >> >> > >> >>> Have a look at the If > >> >>> ( > >> >>> > >> http://tapestry.apache.org/tapestry5/tapestry- > core/ref/org/apache/tapestry5/corelib/components/If.html > >> >>> ) > >> >>> and Zone > >> >>> ( > >> >>> > >> http://tapestry.apache.org/tapestry5/tapestry- > core/ref/org/apache/tapestry5/corelib/components/Zone.html > >> >>> ) > >> >>> components. > >> >>> > >> >>> Uli > >> >>> > >> >>> Am Mi, 1.10.2008, 17:06, schrieb János Jarecsni: > >> >>>> Hi guys, > >> >>>> > >> >>>> is there a way to change the template (piece of the template) > which > >> >>>> gets > >> >>>> generated, depending on state? Here is what I mean: > >> >>>> Given a component C, its C.tml looks like the following: > >> >>>> > >> >>>> <html>blabla... > >> >>>> > >> >>>> //if (loggedIn) > >> >>>> Logged in > >> >>>> //else > >> >>>> Not Logged in > >> >>>> > >> >>>> </html> > >> >>>> > >> >>>> Of course I know this concrete problem can be solved using > expansion. > >> >>>> But > >> >>>> I'm now after replacing large chunks of the template depending on > >> >>>> state. > >> >>>> It > >> >>>> is easy to do so in a JSP page for example. > >> >>>> > >> >>>> Thanks in advance, > >> >>>> janos > >> >>>> > >> >>> > >> >>> > >> >>> ------------------------------------------------------------------- > -- > >> >>> 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]