Ok. Thanks for your support. I was a little confused about it ;-)
On 5/6/05, Broekelmann, Mathias <[EMAIL PROTECTED]> wrote:
>
>
> - You don't have to use a component binding to get access to the
> datamodel. Simply return an instance of DataModel by the method
> getValuesModel() instead of the List. You can use the existing DataModel
> instances like ListDataModel - see javadoc for more subclasses of
> DataModel.
>
> - Hold the returned DataModel in an instance variable to get the current
> row of the datatable
>
> - Keep in Mind: the datatable component uses the same instance of the
> returned DataModel instance to iterate through the rows.
>
> - I think you just forget it: to use value binding you must wrap the
> statements like this: #{bean.valuesModel}
>
> Mathias
>
> > -----Original Message-----
> > From: Enrique Medina [mailto:[EMAIL PROTECTED]
> > Sent: Friday, May 06, 2005 3:18 PM
> > To: Broekelmann, Mathias
> > Cc: MyFaces Discussion
> > Subject: Re: DataTable discussion
> >
> >
> > Thanks for your comments Mathias.
> >
> > I am currently using both the value and a binding to do it:
> >
> > The JSF-Page contains:
> >
> > <h:dataTable value="bean.valuesModel" binding="mDataModel"
> > var="object">
> > <h:column>
> > <h:commandLink action="#{bean.chooseObjectAction}">
> > <x:outputText value="#{object.someProperty}" />
> > </h:commandLink>
> > </h:column>
> > </h:dataTable>
> >
> > The Bean contains:
> >
> > public class SomeBeanClass
> > {
> > UIData mDataModel;
> >
> > // Here goes the setter and the getter for the UIData object.
> >
> > public List getValuesModel()
> > {
> > return initializeValues();
> > }
> >
> > public String chooseObjectAction()
> > {
> > Object currentObject = this.mDataModel.getRowData();
> > }
> > }
> >
> > Does this makes sense?
> >
> > On 5/6/05, Broekelmann, Mathias <[EMAIL PROTECTED]> wrote:
> > > Hi Enrique,
> > >
> > > I use an instance of javax.faces.model.DataModel as a value for the
> > > datatable. The value is held by a bean which holds the
> > instance of the
> > > DataModel. The DataModel instance is used to iterate
> > through the rows of
> > > the datatable. When an action is called on a row I only
> > have to get the
> > > current row from the DataModel to find the row on which the
> > action was
> > > called.
> > >
> > > The JSF-Page contains:
> > >
> > > <h:dataTable value="bean.valuesModel" var="object">
> > > <h:column>
> > > <h:commandLink action="#{bean.chooseObjectAction}">
> > > <x:outputText value="#{object.someProperty}" />
> > > </h:commandLink>
> > > </h:column>
> > > </h:dataTable>
> > >
> > > The Bean contains:
> > >
> > > public class SomeBeanClass
> > > {
> > > DataModel mValueModel;
> > >
> > > public DataModel getValuesModel()
> > > {
> > > if(mValueModel == null)
> > > {
> > > mValueModel = new ListDataModel(initializeValues());
> > > }
> > > return mValueModel;
> > > }
> > >
> > > public String chooseObjectAction()
> > > {
> > > Object currentObject = getValuesModel().getRowData();
> > > }
> > > }
> > >
> > > Hope this helps a little bit.
> > >
> > > Mathias
> > >
> > >
> > > > -----Original Message-----
> > > > From: Enrique Medina [mailto:[EMAIL PROTECTED]
> > > > Sent: Thursday, May 05, 2005 6:58 PM
> > > > To: MyFaces Discussion
> > > > Subject: DataTable discussion
> > > >
> > > >
> > > > Hi,
> > > >
> > > > I would like to know your opinion about how to work with DataTable
> > > > using MyFaces in the typical example where a list of objects is
> > > > presented and a link for each object is generated so as
> > to go to some
> > > > kind of maintenance form.
> > > >
> > > > IMHO this can be achieved using several approaches:
> > > >
> > > > 1) Bind the DataTable component to a property in a JSF bean; then
> > > > create an action in the bean and associate it to the
> > CommandLink so
> > > > whenever the link is clicked, the action will be invoked,
> > and you will
> > > > be able to get the current object with dataTable.getRowData():
> > > >
> > > > <x:dataTable var="object" binding="#{ObjectBean.objectDataTable}"
> > > > preserveDataModel="true">
> > > > <h:column>
> > > > <x:commandLink action="#{ObjectBean.chooseObjectAction}"
> > > > immediate="true">
> > > > <x:outputText value="#{object.someProperty}" />
> > > > </x:commandLink>
> > > > </h:column>
> > > > </x:dataTable>
> > > >
> > > > 2) Just give the value of the DataTable a collection of
> > objects, but
> > > > use an UpdateActionListener to know which object was
> > clicked (as now
> > > > you don't have the getRowData() available). This results
> > in a setter
> > > > in our JSF bean being invoked when the link is clicked:
> > > >
> > > > <x:dataTable var="object" value="#{ObjectBean.listOfObjects}"
> > > > preserveDataModel="true">
> > > > <h:column>
> > > > <x:commandLink action="nextPage" immediate="true">
> > > > <x:outputText value="#{object.someProperty}" />
> > > > <x:updateActionListener value="#{object.id}"
> > > > property="#{ObjectBean.id}" />
> > > > </x:commandLink>
> > > > </h:column>
> > > > </x:dataTable>
> > > >
> > > > In my tests, the update action method in the JSF bean doesn't get
> > > > invoked if I set preserveDataModel="false". Don't know why...
> > > >
> > > > 3) Similar to 2, but using request parameters instead of the
> > > > UpdateActionListener, that can be later obtained from within the
> > > > action in the JSF bean:
> > > >
> > > > <x:dataTable var="object" value="#{ObjectBean.listOfObjects}"
> > > > preserveDataModel="true">
> > > > <h:column>
> > > > <x:commandLink action="#{ObjectBean.chooseObjectAction}"
> > > > immediate="true">
> > > > <x:outputText value="#{object.someProperty}" />
> > > > <f:param value="#{object.id}" />
> > > > </x:commandLink>
> > > > </h:column>
> > > > </x:dataTable>
> > > >
> > > > And then from the JSF bean, get the parameters using the
> > FacesContext
> > > > through the getParametersMap() method.
> > > >
> > > > What do you currently use? What do you think is the best approach?
> > > > What are the alternatives?
> > > >
> > > > An also, what happens when the DataModel must survive between
> > > > different requests, for example, when using tabs? Is the
> > only solution
> > > > to make the JSF bean session scoped?
> > > >
> > > > Looking forward to hearing your comments ;-)
> > > >
> > >
> >
>