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.