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.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]
>>
>>
>

Reply via email to