Hi,

you can get the rendered 'htmlId' of a component by
  component.getCientId(facesContext);

so you can do :

  UIOutput texto5 = (HtmlOutputText) FacesUtils.getApplication()
     .createComponent(HtmlOutputText.COMPONENT_TYPE);

  texto5.getAttributes().put("onclick",
      "validate('" + texto4.getClientId(facesContext) + "')");

Regards,
  Volker

Enrique Medina wrote:
> Also I forgot to say, that if I wanted to use the onclick method on the
> same UIInput component, I could define it easily by:
> 
>      texto4.getAttributes().put("onclick", "validate(this.value)");
> 
> As you can see, I know that 'this' refers to my component. But what
> happens if I need to refer to "texto4" component value from another
> component. Imagine:
> 
>             UIOutput texto5 = (HtmlOutputText) FacesUtils.getApplication()
>                     .createComponent(HtmlOutputText.COMPONENT_TYPE);
> 
>             texto5.getAttributes().put("onclick", validate(XXXXXX));
> 
> where XXXXXX is a Javascript reference to the value of "texto4".
> 
> 
> 2006/1/19, Enrique Medina <[EMAIL PROTECTED]
> <mailto:[EMAIL PROTECTED]>>:
> 
>     Let me give a more detailed explanation of what I am trying to achieve..
> 
>     In my application I need to work with data in a spreadsheet form, so
>     I decided to use a PanelTabbed component, where each tab would
>     contain a HtmlDataTable. All these would simulate an Excel page,
>     where I can change the actual tab, make some modifications to the
>     elements in the table, go to another tab, modify, etc, so at the end
>     I would press the save button, and all the changes would be
>     persisted to the DB.
> 
>     The big problem I had with defining this page was the fact that all
>     the data that was used to populate the tables in each tab was not
>     known at compile time, as it depended on the values entered by the
>     user during the normal use of the application.
> 
>     So I had to create all the components dynamically through Java code.
>     To accomplish this objective, I created a JSP file with simply a
>     PanelTabbed tag that I binded to a property in my backing bean, so
>     whenever JSF called my setBindedTabbedPane method, I could create
>     all the tabs, tables, labels, inputs, etc, in code.
> 
>     Once done, everything was perfect, in the sense that my application
>     was implemented to dynamically create all the components needed to
>     simulate an Excel worksheet; i.e. dynamic number of columns and
>     rows, dynamic number of tabs, etc.
> 
>     On the other hand, I have also added DWR to my application in order
>     to use Ajax for particular purposes, like showing child data in a
>     datatable, or simply validate some specific fields without having to
>     make a JSF request. So I decided to add a DWR Ajax validate process
>     to my recently created Excel worksheet.
> 
>     But the problem comes because when using DWR Ajax, I need to define
>     a callback function in Javascript where I have to pass as a
>     parameter the value that I want to be validated. As you already
>     know, I am generating all the components dynamically in code, within
>     a loop that reuses temporal variable names for the sake of
>     performance and clearness. This means that I use the
>     FacesContext.getApplication().createComponent() to create every
>     component, but reusing the same variable in the loop, as I don't
>     know how many components will I have to create (i.e. how many inputs
>     or datatables or tabs).
> 
>     To better clarify, imagine that I want to add a Javascript call in
>     the onclick method of an input text box. When creating the component
>     dynamically, I could do:
> 
>                 UIInput texto4 = (HtmlInputText) FacesUtils.getApplication()
>                         .createComponent(HtmlInputText.COMPONENT_TYPE);
> 
>                 texto4.getAttributes().put("styleClass", "txt");
>                 texto4
>                         .setValueBinding(
>                                 "rendered",
>                                 FacesUtils
>                                        
>     .getValueBinding("#{puntuacionesBean.mapaScoreboardPuntuaciones['"
>                                                 + codigoGrupo
>                                                 + "'].puntuacionColumna
>     != null}"));
>                 texto4
>                         .setValueBinding(
>                                 "value",
>                                 FacesUtils
>                                        
>     .getValueBinding("#{puntuacionesBean.mapaScoreboardPuntuaciones['"
>                                                 + codigoGrupo
>                                                 +
>     "'].puntuacionColumna}"));
> 
>     Please notice that this piece of code will be executed for each
>     input text box that is needed. If I set the Id with:
> 
>                 texto4.setId("_input");
> 
>     Then this ID will be used as the last part of the HTML generated ID
>     when rendering the page, so there is no way to know it when writing
>     this code in the backing bean.
> 
>     So in the end, my question was about how could I know that ID at
>     runtime. I mean, I can use EL to bind values with my objects'
>     properties, but could I also do something similar with component
>     attributes?
> 
>     2006/1/19, Volker Weber <[EMAIL PROTECTED]
>     <mailto:[EMAIL PROTECTED]>>:
> 
>         Hi,
> 
>         Enrique Medina wrote:
>> But I don't want to inject another bean. When I talk about
>         components I
>> mean view components in the model component; e.g. refer to an
>> HtmlInputText from another HtmlOutputText.
>>
>> The problem I have is that I need to refer to the value of one
>         component
>> from another one in code, and both of them are dynamically
>         created in
>> the same backing bean.
>>
> 
>         If you create the components you can store references to them in
>         your bean.
> 
>         Ohterwise you need to walk through the component tree, or try to
>         fetch
>         them via findComponent(id) method.
> 
>         Regards,
>           Volker
> 
>         --
>         Don't answer to From: address!
>         Mail to this account are droped if not recieved via mailinglist.
>         To contact me direct create the mail address by
>         concatenating my forename to my senders domain.
> 
> 
> 

-- 
Don't answer to From: address!
Mail to this account are droped if not recieved via mailinglist.
To contact me direct create the mail address by
concatenating my forename to my senders domain.

Reply via email to