You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tapestry.apache.org by Cordenier Christophe <Ch...@atosorigin.com> on 2008/03/11 15:57:33 UTC

T5 : How to access to a Component Body in a generic way ?

Actually i'm wondering if it would be possible to monitor every elements contained in a part of a Template.
Extracting persistent fields, parameters... Every information that defines the state of the portion of template for a user request.

-----Message d'origine-----
De : Howard Lewis Ship [mailto:hlship@gmail.com]
Envoyé : mardi 11 mars 2008 15:34
À : Tapestry users
Objet : Re: T5 : How to access to a Component Body ?

You should think not of the Tabs conponent "controlling" the Tab
components, but of all of them working together.

The Tabs component can place an object into the Environment.

The Tab components can retrieve that object, to "register" themselves
so that the Tabs can render the correct markup.

This is the relationship between Form and TextField (and friends).


On Tue, Mar 11, 2008 at 6:31 AM, Davor Hrg <hr...@gmail.com> wrote:
> 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 <dm...@neopeak.com> 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
>  >  > <Ch...@atosorigin.com> 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:hrgdavor@gmail.com]
>  >  >> 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
>  >  >> <Ch...@atosorigin.com> 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: users-unsubscribe@tapestry.apache.org
>  >  >>> For additional commands, e-mail: users-help@tapestry.apache.org
>  >  >>>
>  >  >>>
>  >  >>
>  >  >> ---------------------------------------------------------------------
>  >  >> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
>  >  >> For additional commands, e-mail: users-help@tapestry.apache.org
>  >  >>
>  >  >>
>  >  >>
>  >  >>
>  >  >> 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: users-unsubscribe@tapestry.apache.org
>  >  >> For additional commands, e-mail: users-help@tapestry.apache.org
>  >  >>
>  >  >>
>  >  >
>  >  > ---------------------------------------------------------------------
>  >  > To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
>  >  > For additional commands, e-mail: users-help@tapestry.apache.org
>  >  >
>  >
>  >
>
>  ---------------------------------------------------------------------
>  To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
>  For additional commands, e-mail: users-help@tapestry.apache.org
>
>



--
Howard M. Lewis Ship

Creator Apache Tapestry and Apache HiveMind

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org




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: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org