Other more elegant way to do it will be to bind the dataTable with a UIData property in the backing bean.
In the action listener method you can then iterate over the rows easily. ~madhav > -----Original Message----- > From: Nebinger, David [mailto:[EMAIL PROTECTED] > Sent: Friday, November 10, 2006 11:02 PM > To: MyFaces Discussion > Subject: RE: Selectable DataTable or similar to that > > Your logic is off; you get the parent but aren't testing it's class before > casting. You probably want the code to be: > > public void saveStudents(ActionEvent event){ > SelectableApplicant selectableApplicant = null; > java.util.ArrayList selectableApplicants=null; > > UIComponent tmpComponent = event.getComponent(); > > while (null != tmpComponent && !(tmpComponent instanceof UIData)) { > tmpComponent = tmpComponent.getParent(); > } > > if (tmpComponent != null) { > Object tmpRowData = ((UIData) tmpComponent).getRowData(); > if (tmpRowData instanceof SelectableApplicant) { > selectableApplicant = (SelectableApplicant) tmpRowData; > selectableApplicants.add(selectableApplicant); > > } > } > > > -----Original Message----- > > From: Damar Thapa [mailto:[EMAIL PROTECTED] > > Sent: Friday, November 10, 2006 11:30 AM > > To: MyFaces Discussion > > Subject: Re: Selectable DataTable or similar to that > > > > > > Hi, > > > > I have the following actionEvent method: > > > > public void saveStudents(ActionEvent event){ > > SelectableApplicant selectableApplicant = null; > > java.util.ArrayList selectableApplicants=null; > > > > UIComponent tmpComponent = event.getComponent(); > > > > while (null != tmpComponent && !(tmpComponent instanceof > > UIData)) { > > tmpComponent = tmpComponent.getParent(); > > Object tmpRowData = ((UIData) tmpComponent).getRowData(); > > if (tmpRowData instanceof SelectableApplicant) { > > selectableApplicant = (SelectableApplicant) tmpRowData; > > selectableApplicants.add(selectableApplicant); > > > > } > > } > > > > The value of dataTable is applications (a list of SelectableApplicant > > objects). I am trying to put these object into selectableApplicants > > list. What I have done wrong here? I am getting following error > > message: > > > > I get the following error: > > > > javax.faces.el.EvaluationException: /pages/applicationProcess.xhtml > > @70,126 actionListener="#{applicationProcess.saveStudents}": > > java.lang.ClassCastException: javax.faces.component.html.HtmlPanelGrid > > > > com.sun.facelets.el.LegacyMethodBinding.invoke(LegacyMethodBin > > ding.java:73) > > javax.faces.component.UICommand.broadcast(UICommand.java:86) > > > > javax.faces.component.UIViewRoot._broadcastForPhase(UIViewRoot > > .java:94) > > > > javax.faces.component.UIViewRoot.processApplication(UIViewRoot > > .java:168) > > > > org.apache.myfaces.lifecycle.LifecycleImpl.invokeApplication(L > > ifecycleImpl.java:343) > > > > org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleIm > > pl.java:86) > > javax.faces.webapp.FacesServlet.service(FacesServlet.java:137) > > > > org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(Ext > > ensionsFilter.java:144) > > > > Thanks for all the helps! > > > > Damar > > > > > > On 11/10/06, Gerald Müllan <[EMAIL PROTECTED]> wrote: > > > Hi, > > > > > > speaking in code, it would be something like this: > > > > > > public void deleteRow(ActionEvent actionEvent) > > > { > > > UIData uiData = JsfUtils.getUIDataParent(actionEvent); > > > getList().remove(uiData.getRowIndex()); > > > } > > > > > > In JsfUtils: > > > > > > public static UIData getUIDataParent(ActionEvent e) > > > { > > > UIComponent component = e.getComponent(); > > > > > > while (component != null && !(component instanceof UIData)) > > > { > > > component = component.getParent(); > > > } > > > > > > return (UIData) component; > > > } > > > > > > cheers, > > > > > > Gerald > > > > > > On 11/10/06, Damar Thapa <[EMAIL PROTECTED]> wrote: > > > > Hi, > > > > > > > > > > > > Sorry to bother you all again! > > > > > > > > What is the command in action event method to get the > > dataTable's data > > > > so as to manipulate it? > > > > > > > > I will start googling for this tonight. > > > > > > > > Thanks, > > > > > > > > Damar > > > > > > > > On 11/9/06, Damar Thapa <[EMAIL PROTECTED]> wrote: > > > > > Thanks, Simon. > > > > > > > > > > I will try this. > > > > > > > > > > Damar > > > > > > > > > > > > > > > On 11/9/06, Simon Kitching <[EMAIL PROTECTED]> wrote: > > > > > > Hi Damar, > > > > > > > > > > > > I think one way to do this is write a simple class: > > > > > > public class SelectableApplicant { > > > > > > private boolean isSelected; > > > > > > private Applicant applicant; > > > > > > // add getters/setters for above > > > > > > } > > > > > > > > > > > > Change applicationProcess.applicants to return a list of > > > > > > SelectableApplicant rather than Applicant directly. > > > > > > > > > > > > Your JSP columns can be: > > > > > > <h:column> > > > > > > <t:selectBooleanCheckbox .. > > value="#{application.selected}"/> > > > > > > </h:column> > > > > > > > > > > > > <h:column> > > > > > > <h:outputText value="#{application.applicant.firstName}"/> > > > > > > </h:column> > > > > > > > > > > > > etc. > > > > > > > > > > > > Obviously, you can now iterate over the rows in the > > data model, checking > > > > > > the boolean flag and if set processing the associated > > applicant object. > > > > > > > > > > > > Regards, > > > > > > > > > > > > Simon > > > > > > > > > > > > Damar Thapa wrote: > > > > > > > Hi, > > > > > > > > > > > > > > Thanks for your help - truly appreciated. > > > > > > > > > > > > > > Now, I am in the last stage of this problem, ie I > > have to save the > > > > > > > data from the dataTable into a new file and in new > > Class structure. It > > > > > > > may be straight forward, anyway, I explain what I > > am trying to do. > > > > > > > The following is the snapshot of my dataTable: > > > > > > > > > > > > > > <t:dataTable id="applicantsData" > > > > > > > ...... > > > > > > > ...... > > > > > > > var="application" > > > > > > > value="#{applicationProcess.applications}" > > > > > > > border="1" > > > > > > > preserveDataModel="false"> > > > > > > > <h:column> > > > > > > > <f:facet name="header"><h:outputText > > value="Selected"/></f:facet> > > > > > > > <t:selectBooleanCheckbox forceId="true" id="chk" > > > > > > > onclick="onChangeSelect(this);" > > > > > > > value="#{applicationProcess.selected}"/> > > > > > > > </h:column> > > > > > > > > > > > > > > <h:column> > > > > > > > <f:facet name="header"><h:outputText value="First > > Name"/></f:facet> > > > > > > > <h:outputText value="#{application.firstName}"/> > > > > > > > </h:column> > > > > > > > > > > > > > > Surname, > > > > > > > Class > > > > > > > .... > > > > > > > > > > > > > > > > > > > > > </t:dataTable> > > > > > > > > > > > > > > The dataTable is using > > applicationProcess.applications list, which is > > > > > > > a list of Applicant object. Applicant Object has > > firstName, surname, > > > > > > > class, etc. and I have added > > <t:selectBooleanCheckBox> to determine if > > > > > > > the individual applicants are selected (and its value ie > > > > > > > applicationProcess.selected is not the property of > > Applicant Class). > > > > > > > > > > > > > > What I have to do is iterate on the rows of > > dataTable and if the > > > > > > > <selectBooleanCheckbox> is checked, put it in > > another List. How can I > > > > > > > do this? > > > > > > > > > > > > > > In the following,say: > > > > > > > > > > > > > > public void saveData(ActionEvent event){ > > > > > > > > > > > > > > FacesContect context=FacesContext.getCurrentInstance(); > > > > > > > List aList=event.getComponent()..... > > > > > > > ..... > > > > > > > > > > > > > > In the above, does event returns List from the > > dataTable? The value > > > > > > > of <selectBooleanCheckbox> ie > > applicationProcess.selected is not the > > > > > > > property of <Applicant> class, is it going to be > > the problem> > > > > > > > > > > > > > > > > > > > > > Any pointers would be highly appreciated, and sorry > > for lengthy and > > > > > > > too novice questions. > > > > > > > > > > > > > > With regards, > > > > > > > > > > > > > > Damar > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > > > With regards, > > > > > > > > > > Damar Thapa > > > > > > > > > > > > > > > > > -- > > > > With regards, > > > > > > > > Damar Thapa > > > > > > > > > > > > > -- > > > http://www.irian.at > > > > > > Your JSF powerhouse - > > > JSF Consulting, Development and > > > Courses in English and German > > > > > > Professional Support for Apache MyFaces > > > > > > > > > -- > > With regards, > > > > Damar Thapa > > **************** CAUTION - Disclaimer ***************** This e-mail contains PRIVILEGED AND CONFIDENTIAL INFORMATION intended solely for the use of the addressee(s). If you are not the intended recipient, please notify the sender by e-mail and delete the original message. Further, you are not to copy, disclose, or distribute this e-mail or its contents to any other person and any such actions are unlawful. This e-mail may contain viruses. Infosys has taken every reasonable precaution to minimize this risk, but is not liable for any damage you may sustain as a result of any virus in this e-mail. You should carry out your own virus checks before opening the e-mail or attachment. Infosys reserves the right to monitor and review the content of all messages sent to or from this e-mail address. Messages sent to or from this e-mail address may be stored on the Infosys e-mail system. ***INFOSYS******** End of Disclaimer ********INFOSYS***

