myfaces-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Harald Müller <harald.muel...@wimaxtelecom.at>
Subject Re: datatable - parameter passing - workaround?
Date Tue, 13 Dec 2005 09:21:04 GMT
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
> 
> 


Mime
View raw message