did you take a look at t:columns ? I suggest you to use it if you need
dynamic columns. You could then follow the wiki doc at
http://wiki.apache.org/myfaces/Dynamic_Columns
2005/12/13, Harald Müller <[EMAIL PROTECTED]>:
> Hi!
>
> Thanks for your answer.
>
> Let me try to describe my problem. I'm trying to build a datatable
> with dynamic columns (additionally to some static columns). All information
> for the datatable-creation is stored in a xml-file. It's not a big deal
> building these dynamic colums with the right header but to fill it with
> content I have to call a getter with a parameter.
>
> In my particular case:
> taskInstance.getVariable('variable_name');
>
> Ok ... and that's my problem ...
>
> Any suggestion?
>
> Thanks,
> Harry
>
>
> -----Ursprüngliche Nachricht-----
> Von: Simon Kitching [mailto:[EMAIL PROTECTED]
> Gesendet: Montag, 12. Dezember 2005 21:35
> An: MyFaces Discussion
> Betreff: Re: datatable - parameter passing - workaround?
>
> Hi,
>
> The rowIndex value changes when the enclosing table iterates over the
> DataModel. For example, when the table is *rendering*, it does:
>
> for(int index=0; ; ++index) {
> dataModel.setRowIndex(index);
> if (!dataModel.isRowAvailable)
> break;
>
> Object o = dataModel.getRowData();
> // render a row for object o
> }
> dataModel.setRowIndex(-1);
>
> It does similar things during the "applyRequestValues" and "updateModel"
> phases. In particular, any listeners (including action methods) on the
> component which fire during these steps can assume that the
> rowIndex/rowData point to the relevant row/object *at the time the
> listener is invoked*. However the rowIndex is obviously not relevant
> outside of the listener callbacks.
>
> I can't see what you are trying to achieve with your code below. Maybe
> you could describe the problem you're trying to solve?
>
> Regards,
>
> Simon
>
> Harald Müller wrote:
> >
> > List contentList = new ArrayList();
> > for (int i = 0 ; i<10;i++) {
> > contentList.add("row " + i);
> > }
> > DataModel content = new ListDataModel(contentList);
> > hdt.setValue(content);
> >
> >
> > The console-output looks like:
> >
> > [STDOUT] >>>>>>>>>> ==> ROWCOUNT 2
> > [STDOUT] >>>>>>>>>> ==> ROWINDEX 0
> > [STDOUT] >>>>>>>>>> ==> WRAPPEDDATA [EMAIL PROTECTED], [EMAIL PROTECTED]
> > [STDOUT] >>>>>>>>>> ==> ROWDATA [EMAIL PROTECTED]
> > [STDOUT] >>>>>>>>>> ==> ROWCOUNT 2
> > [STDOUT] >>>>>>>>>> ==> ROWINDEX 0
> > [STDOUT] >>>>>>>>>> ==> WRAPPEDDATA [EMAIL PROTECTED], [EMAIL PROTECTED]
> > [STDOUT] >>>>>>>>>> ==> ROWDATA [EMAIL PROTECTED]
> >
> > As you can see there are 2 elements (wrappeddata) but the rowindex is not
> > incremented during the iteration ... so I always get the first
> > element/object back by using 'content.getRowData()'.
> >
> > What am I doing wrong?
> >
> > Thanks,
> > Harry
> >
> >
> >
> > -----Ursprüngliche Nachricht-----
> > Von: Mathias Brökelmann [mailto:[EMAIL PROTECTED]
> > Gesendet: Montag, 12. Dezember 2005 15:39
> > An: MyFaces Discussion
> > Betreff: Re: datatable - parameter passing - workaround?
> >
> > use an instance of javax.faces.model.DataModel for the datatable´s
> > value. You can then use datamodel.getRowIndex() or
> > datamodel.getRowData() to get the current row value during the
> > iteration.
> >
> > 2005/12/12, Harald Müller <[EMAIL PROTECTED]>:
> >> Hi!
> >>
> >> My current (test)code to create a datatable in a dynamic created tab looks
> >> like this:
> >>
> >>
> >> // datatable
> >> UIData hdt =
> >> (HtmlDataTable)app.createComponent(HtmlDataTable.COMPONENT_TYPE);
> >> hdt.setId("hdtId1");
> >> hdt.setVar("hdtVar1");
> >> tab.getChildren().add(hdt);
> >>
> >> List content = new ArrayList();
> >> for (int i = 0 ; i<10;i++) {
> >> content.add("row " + i);
> >> }
> >> hdt.setValue(content);
> >>
> >> // create column
> >> UIColumn column =
> >> (UIColumn)app.createComponent(HtmlSimpleColumn.COMPONENT_TYPE);
> >>
> >> // create and add header
> >> UIOutput header =
> >> (UIOutput)app.createComponent(HtmlOutputText.COMPONENT_TYPE);
> >> header.setValue("Last Column");
> >> column.setHeader(header);
> >>
> >> // create and add content
> >> UIOutput text =
> >> (UIOutput)app.createComponent(HtmlOutputText.COMPONENT_TYPE);
> >> ValueBinding valueBinding = app.createValueBinding(#{hdtVar1})
> >> text.setValueBinding("value", valueBinding);
> >> column.getChildren().add(text);
> >>
> >> // add column
> >> hdt.getChildren().add(column);
> >>
> >>
> >>
> >> Ok ... it is not possible to pass a parameter using "valuebinding" - so,
> >> there is no way
> >> to call #{hdtVar1.name(mystring)} ... right?
> >>
> >> Is there a way to call a bean-setter and set the current object (of the
> >> datatable-iteration)
> >> in my bean, so that I'm able to call something like 'String whatever =
> >> hdtVar1.getName("mystring")'
> >> and do a 'text.setValue(whatever)' from there?
> >>
> >> Thanks,
> >> Harry
> >>
> >
> >
> > --
> > Mathias
> >
> >
>
>
--
Mathias