actualy,
you need not even do anything on the server side for such tabs,

this can be easily achieved with a small javascript function.
go through all children and generate tab controls taking title attribute
as ctrl text:

child.getAttribute("title");

for example I have a small hacked up js just for it
it uses label instead title


var TapestryUtil = {
    createTabs: function(id){
        var elem = $(id);
        var selected = elem.getAttribute("selected");
        var tabs = document.createElement("DIV");
        tabs.className = "minitab";
        var cont = document.createElement("DIV");
        cont.className = "minitab_content";
        var ch;
        while(ch = elem.firstChild){
            elem.removeChild(ch);
            cont.appendChild(ch);
            var code = ch.getAttribute("code");
            var label = ch.getAttribute("label");

                var tab = document.createElement("A");
                tab.href="#"+(code||"");
                tab.className = "minitab";
                tab.innerHTML = label || code || "unlabelled";
            tab._refContent = ch;
            tab.onclick = tabClick;

            if(code != null && selected != "null" && selected == code){
                ch.style.display == "";
            }else if(selected != null)
                ch.style.display == "none";

            if(ch.style.display != "none") tab.className += " selected_minitab";
            tabs.appendChild(tab);
        }
        elem.appendChild(tabs);
        elem.appendChild(cont);

        function tabClick(){
            var current = this;
            this.blur();
            var ch = current.parentNode.firstChild;
            while(ch){
                if(ch != current){
                        Element.removeClassName(ch,"selected_minitab");
                        ch._refContent.style.display = "none";
                }else{
                        Element.addClassName(ch,"selected_minitab");
                        ch._refContent.style.display = "";
                }
                ch = ch.nextSibling;
            }
            return false;
        }
    }


};

Davor Hrg


On Tue, Mar 11, 2008 at 1:15 PM, David Marquis <[EMAIL PROTECTED]> wrote:
> Hi,
>
>  He's having the same problem I had some time ago.
>  Suppose I want to create a Tab Component and I want to be able to
>  define it like this in the templates:
>
>  <t:tabs t:id="myTabs">
>    <t:tab t:id="tabOne" title="First tab">
>        <h1>Body of tab1</h1>
>        <p>Continuing body...</p>
>    </t:tab>
>    <t:tab t:id="tabTwo" title="Second tab">
>        <h1>Body of tab2</h1>
>        <p>Continuing body...</p>
>    </t:tab>
>  </t:tabs>
>
>  If would then like to 'render' this about that way:
>
>  <div class="tabs">
>     <ul class="tabTitles">
>        <li><a href="." onclick="switchtabs(1);">First tab</li>
>        <li><a href="." onclick="switchtabs(2);">Second tab</li>
>     </ul>
>     <div id="tabOne" class="tab selected">
>        <h1>Body of tab1</h1>
>        <p>Continuing body...</p>
>     </div>
>     <div id="tabTwo" class="tab">
>        <h1>Body of tab2</h1>
>        <p>Continuing body...</p>
>     </div>
>  </div>
>
>  This is, I think, the most natural way of expressing tabs.
>  But such a thing is not possible, because the Tabs component cannot
>  accessing its child Tag components dynamically.
>  More: if you provide a body for a component (like above), you cannot
>  provide a template for this same component.
>
>  I haven't found a way to implement such a component, and I think I had
>  about the same initial problem as Christopher : A component cannot
>  easily access its 'children' defined in the base template, build an
>  internal model from that, and render using this model and an internal
>  template.
>
>  --
>  David
>
>
>
>  On 11-Mar-08, at 6:57 AM, Davor Hrg wrote:
>
>  > explain what are zou trzing to achieve, maybe we can offer a different
>  > approach..
>  >
>  > Davor Hrg
>  >
>  > On Tue, Mar 11, 2008 at 10:33 AM, Cordenier Christophe
>  > <[EMAIL PROTECTED]> wrote:
>  >> Thank you for your answer,
>  >>
>  >> But actually my component must access its child in a dynamic way.
>  >> It will be used in different context for analysis purpose.
>  >>
>  >> I've been searching for different ways to access a component body.
>  >>
>  >> For exemple, by using "nestedId" at creation time by decorating the
>  >> PageElementFactory to identify if a component is contained in my
>  >> component, but the nestedId does not contain the id of the parent
>  >> component but is only suffixed to the container nested id.
>  >>
>  >> By decorating ComponentPageElement and intercepting "addToBody"
>  >> method call for my component only, but it was not enough for the
>  >> children and I don't want to generalize the use of these kind of
>  >> hooks or wrapping mechanism because of the "internal" aspect of the
>  >> PageElementFactory and ComponentPageElement classes.
>  >>
>  >> Best regards,
>  >> Christophe.
>  >>
>  >> -----Message d'origine-----
>  >> De : Davor Hrg [mailto:[EMAIL PROTECTED]
>  >> Envoyé : mardi 11 mars 2008 10:08
>  >> À : Tapestry users
>  >> Objet : Re: T5 : How to access to a Component Body ?
>  >>
>  >>
>  >>
>  >> you can not access child components geenricaly,
>  >> but you can access blocks by id.
>  >>
>  >> you can embed components
>  >> @Component TextField name; //component's class is decided here
>  >> and in template simply put:
>  >> <div t:id="name"/>
>  >>
>  >>
>  >> but to access a textfield as Field you can:
>  >> @InjectComponent private Field name;
>  >> and then component's class is resolved from the template
>  >> so in the template you must put:
>  >> <t:textfield id="name"/>
>  >>
>  >>
>  >> you can not use it like this:
>  >> @Component private Field name;
>  >> and in template
>  >> <t:textfield id="name"/>
>  >>
>  >>
>  >> Davor Hrg
>  >> On Tue, Mar 11, 2008 at 9:25 AM, Cordenier Christophe
>  >> <[EMAIL PROTECTED]> wrote:
>  >>> Hello,
>  >>>
>  >>> I'm currently working on a component that needs to access the
>  >>> content of its body to extract informations like parameters, or
>  >>> persistent variable used by the components declared in its body.
>  >>>
>  >>> Actually, the ComponentResources class allows me to access the
>  >>> container of a component, but it appears that a child is not
>  >>> "contained in" the component.
>  >>> This should have helped me from a down-top view.
>  >>>
>  >>> And I didn't find any method to access the body of a component.
>  >>>
>  >>> Does anyone knows a way to access the children of a component ?
>  >>>
>  >>> Best Regards,
>  >>> Christophe Cordenier.
>  >>>
>  >>>
>  >>> Ce message et les pi?ces jointes sont confidentiels et r?serv?s ?
>  >>> l'usage exclusif de ses destinataires. Il peut ?galement ?tre prot?
>  >>> g? par le secret professionnel. Si vous recevez ce message par
>  >>> erreur, merci d'en avertir imm?diatement l'exp?diteur et de le d?
>  >>> truire. L'int?grit? du message ne pouvant ?tre assur?e sur
>  >>> Internet, la responsabilit? du groupe Atos Origin ne pourra ?tre
>  >>> recherch?e quant au contenu de ce message. Bien que les meilleurs
>  >>> efforts soient faits pour maintenir cette transmission exempte de
>  >>> tout virus, l'exp?diteur ne donne aucune garantie ? cet ?gard et
>  >>> sa responsabilit? ne saurait ?tre recherch?e pour tout dommage r?
>  >>> sultant d'un virus transmis.
>  >>>
>  >>> This e-mail and the documents attached are confidential and
>  >>> intended solely for the addressee; it may also be privileged. If
>  >>> you receive this e-mail in error, please notify the sender
>  >>> immediately and destroy it. As its integrity cannot be secured on
>  >>> the Internet, the Atos Origin group liability cannot be triggered
>  >>> for the message content. Although the sender endeavours to
>  >>> maintain a computer virus-free network, the sender does not
>  >>> warrant that this transmission is virus-free and will not be
>  >>> liable for any damages resulting from any virus transmitted.
>  >>>
>  >>>
>  >>> ---------------------------------------------------------------------
>  >>> 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]
>  >>
>  >>
>  >>
>  >>
>  >> Ce message et les pièces jointes sont confidentiels et réservés à
>  >> l'usage exclusif de ses destinataires. Il peut également être
>  >> protégé par le secret professionnel. Si vous recevez ce message par
>  >> erreur, merci d'en avertir immédiatement l'expéditeur et de le
>  >> détruire. L'intégrité du message ne pouvant être assurée sur
>  >> Internet, la responsabilité du groupe Atos Origin ne pourra être
>  >> recherchée quant au contenu de ce message. Bien que les meilleurs
>  >> efforts soient faits pour maintenir cette transmission exempte de
>  >> tout virus, l'expéditeur ne donne aucune garantie à cet égard et sa
>  >> responsabilité ne saurait être recherchée pour tout dommage
>  >> résultant d'un virus transmis.
>  >>
>  >>
>  >>
>  >> This e-mail and the documents attached are confidential and
>  >> intended solely for the addressee; it may also be privileged. If
>  >> you receive this e-mail in error, please notify the sender
>  >> immediately and destroy it. As its integrity cannot be secured on
>  >> the Internet, the Atos Origin group liability cannot be triggered
>  >> for the message content. Although the sender endeavours to maintain
>  >> a computer virus-free network, the sender does not warrant that
>  >> this transmission is virus-free and will not be liable for any
>  >> damages resulting from any virus transmitted.
>  >>
>  >>
>  >> ---------------------------------------------------------------------
>  >> 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