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.html > > > http://tapestry.apache.org/tapestry5/tapestry-core/ref/org/apache/tapestry5/corelib/components/Delegate.html > > > http://tapestry.apache.org/tapestry5/apidocs/org/apache/tapestry5/ComponentResourcesCommon.html#getBlock(java.lang.String)<http://tapestry.apache.org/tapestry5/apidocs/org/apache/tapestry5/ComponentResourcesCommon.html#getBlock%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#getPage%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] > >