myfaces-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Mathias Brökelmann <mbroekelm...@googlemail.com>
Subject Re: datatable - parameter passing - workaround?
Date Tue, 13 Dec 2005 09:44:45 GMT
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 <harald.mueller@wimaxtelecom.at>:
> 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:skitching@obsidium.com]
> 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 [org.jbpm.taskmgmt.exe.TaskInstance@1a9b034,
org.jbpm.taskmgmt.exe.TaskInstance@b950d1]
> > [STDOUT] >>>>>>>>>> ==> ROWDATA org.jbpm.taskmgmt.exe.TaskInstance@1a9b034
> > [STDOUT] >>>>>>>>>> ==> ROWCOUNT 2
> > [STDOUT] >>>>>>>>>> ==> ROWINDEX 0
> > [STDOUT] >>>>>>>>>> ==> WRAPPEDDATA [org.jbpm.taskmgmt.exe.TaskInstance@1a9b034,
org.jbpm.taskmgmt.exe.TaskInstance@b950d1]
> > [STDOUT] >>>>>>>>>> ==> ROWDATA org.jbpm.taskmgmt.exe.TaskInstance@1a9b034
> >
> > 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:mbroekelmann@googlemail.com]
> > 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 <harald.mueller@wimaxtelecom.at>:
> >> 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

Mime
View raw message