Re: JSFTemplating: Enhancement #10: Dynamic table
Ken,
Any updates?
thanks
-Karam
Ken Paulsen wrote:
>
> The foreach that I currently have is a component itself. So it won't
> create multiple TableColumn components. Also the tree doesn't allow
> non-tree UIComponents inside it.
>
> If we add a foreach that is executed during the creation time, then
> yes... it would work. In JSFT, it wouldn't be too hard to do this
> since the descriptors (LayoutElement) already exist for looping,
> they'd just have to be used during the tree creation... which amounts
> to 1 extra condition. We'd probably need a flag indicating that it is
> intended for tree-creation time... or perhaps a subclass of the
> existing while/foreach layoutelements.
>
> Ken
>
> Imre Oßwald wrote:
>
>> Couldn't that be done with some kind of foreach? (I think i have done
>> that in facelets that way)
>>
>> Imre
>>
>> On 04.07.2007, at 03:17, Karam Singh Badesha wrote:
>>
>>> Ok great.
>>>
>>> thanks
>>> Karam
>>>
>>> Ken Paulsen wrote:
>>>
>>>>
>>>> I think I have enough to go on. I'm going to try to make this
>>>> generic and put it in the JSFT code. Although when I get into it, I
>>>> may change my mind. ;)
>>>>
>>>> Thanks!
>>>>
>>>> Ken
>>>>
>>>> Karam Singh Badesha wrote:
>>>>
>>>>> Ken,
>>>>> This should be fine. Let me know if you are going to deliver this
>>>>> directly to the jsftemplating repository or release as separate
>>>>> jar file. I am out of the office until July11 so might not be able
>>>>> to respond any questions that you send later. If there is anything
>>>>> else you want to know, please let me know now.
>>>>>
>>>>> thanks
>>>>> Karam
>>>>>
>>>>> Ken Paulsen wrote:
>>>>>
>>>>>>
>>>>>> Hi Karam,
>>>>>>
>>>>>> Supporting the attributes you need on the column could look
>>>>>> something like this:
>>>>>>
>>>>>> <sun:table ...>
>>>>>> <sun:dynamicColumnTableRowGroup data="#{dataOnly}"
>>>>>> columnId="#{listOfIds}"
>>>>>> columnHeaderText="#{listOfHeaderText}"
>>>>>> columnFooterText="#{listOfFooterText}"
>>>>>> columnRowHeader="#{listOf...}"
>>>>>> columnSort="#{listOf...}"
>>>>>> columnAlign="#{listOf...}"
>>>>>> columnWidth="#{listOf...}"
>>>>>> columnSpacerColumn="#{listOf...}"
>>>>>> [TableRowGroup properties here]
>>>>>> />
>>>>>> </sun:table>
>>>>>>
>>>>>> It is necessary to pass in a List of values because each column
>>>>>> needs a value for each of these properties.
>>>>>>
>>>>>> There are other ways (including passing in a data structure that
>>>>>> contains all the info in one EL expression), I'd like to know
>>>>>> what you'd prefer. I'd also probably want to support all the
>>>>>> other TRG properties to make it generally useful.
>>>>>>
>>>>>> Ken
>>>>>>
>>>>>> Karam Singh Badesha wrote:
>>>>>>
>>>>>>> Ken,
>>>>>>> Actually TableRowGroup is ok to stay on the jsf page, all I need
>>>>>>> is a way to pass the various columns (tableColumn) to the page.
>>>>>>> Currently on tableColumn I only use following properties:
>>>>>>> id headerText
>>>>>>> footerText
>>>>>>> rowHeader
>>>>>>> sort
>>>>>>> align
>>>>>>> width
>>>>>>> spacerColumn
>>>>>>>
>>>>>>> In the following example:
>>>>>>> <sun:table ...>
>>>>>>> <sun:dynamicColumnTableRowGroup data="#{dataOnly}"
>>>>>>> columnVisible="#{listOfVisibleValuesOneForEachColumn}"
>>>>>>> columnSortIcon="#{listOfSortIconValuesOneForEachColumn}"
>>>>>>> ...
>>>>>>> [TableRowGroup properties here] />
>>>>>>> </sun:table>
>>>>>>>
>>>>>>> What does columnVisible and columnSortIcon do? In this approach
>>>>>>> where do I specify the columnHeaders? If this approach is
>>>>>>> straight forward and I can get the column headers etc from a
>>>>>>> resource file, its fine with me.
>>>>>>>
>>>>>>> thanks
>>>>>>> Karam
>>>>>>>
>>>>>>>
>>>>>>> Ken Paulsen wrote:
>>>>>>>
>>>>>>>>
>>>>>>>> Hi Karam,
>>>>>>>>
>>>>>>>> We need to work out what tableData's data structure looks like.
>>>>>>>> The table component could have all it's properties as as it
>>>>>>>> normally does (no need to worry about them). However, you're
>>>>>>>> hiding the tableRowGroup and tableColumn components... so
>>>>>>>> they'll need to be created from the data.
>>>>>>>>
>>>>>>>> TableRowGroup supports the following properties:
>>>>>>>>
>>>>>>>> tableDataSorter
>>>>>>>> onDblClick
>>>>>>>> onKeyPress
>>>>>>>> sourceData
>>>>>>>> aboveColumnFooter
>>>>>>>> extraFooterHtml
>>>>>>>> onKeyUp
>>>>>>>> onMouseUp
>>>>>>>> extraHeaderHtml
>>>>>>>> footerText
>>>>>>>> align
>>>>>>>> selectMultipleToggleButton
>>>>>>>> onClick
>>>>>>>> groupToggleButton
>>>>>>>> toolTip
>>>>>>>> onMouseDown
>>>>>>>> tableDataFilter
>>>>>>>> multipleColumnFooters
>>>>>>>> rows
>>>>>>>> sourceVar
>>>>>>>> valign
>>>>>>>> first
>>>>>>>> onMouseOut
>>>>>>>> multipleTableColumnFooters
>>>>>>>> onMouseOver
>>>>>>>> onMouseMove
>>>>>>>> emptyDataMsg
>>>>>>>> selected
>>>>>>>> collapsed
>>>>>>>> visible
>>>>>>>> aboveColumnHeader
>>>>>>>> onKeyDown
>>>>>>>> headerText
>>>>>>>> styleClasses
>>>>>>>> aboveColumnHeader
>>>>>>>> onKeyDown
>>>>>>>> headerText
>>>>>>>> styleClasses
>>>>>>>>
>>>>>>>> TableRowGroup also supports these facets:
>>>>>>>>
>>>>>>>> header
>>>>>>>> footer
>>>>>>>>
>>>>>>>> TableColumn supports these properties:
>>>>>>>>
>>>>>>>> spacerColumn
>>>>>>>> width
>>>>>>>> onDblClick
>>>>>>>> sort
>>>>>>>> selectedId
>>>>>>>> onKeyPress
>>>>>>>> severity
>>>>>>>> rendered
>>>>>>>> rowHeader
>>>>>>>> extraTableFooterHtml
>>>>>>>> extraFooterHtml
>>>>>>>> onKeyUp
>>>>>>>> onMouseUp
>>>>>>>> styleClass
>>>>>>>> descending
>>>>>>>> embeddedActions
>>>>>>>> height
>>>>>>>> extraHeaderHtml
>>>>>>>> align
>>>>>>>> footerText
>>>>>>>> scope
>>>>>>>> style
>>>>>>>> sortImageURL
>>>>>>>> onClick
>>>>>>>> sortIcon
>>>>>>>> toolTip
>>>>>>>> onMouseDown
>>>>>>>> alignKey
>>>>>>>> tableFooterText
>>>>>>>> valign
>>>>>>>> noWrap
>>>>>>>> onMouseOut
>>>>>>>> onMouseOver
>>>>>>>> emptyCell
>>>>>>>> visible
>>>>>>>> onMouseOut
>>>>>>>> onMouseOver
>>>>>>>> onMouseMove
>>>>>>>> emptyCell
>>>>>>>> visible
>>>>>>>> onKeyDown
>>>>>>>> headerText
>>>>>>>>
>>>>>>>> TableColumn defines these facets:
>>>>>>>>
>>>>>>>> footer
>>>>>>>> header
>>>>>>>> tableFooter
>>>>>>>>
>>>>>>>> So as you can see, the data structure is non-trivial. However,
>>>>>>>> it may not be as bad as it seems either. If we can agree to not
>>>>>>>> try to generate TableRowGroup, we can leave its definition in
>>>>>>>> the .jsf file. I don't think it adds a lot of value to try to
>>>>>>>> eliminate it. As for all the properties on TableColumn... we
>>>>>>>> could decide to support only a subset. And/or we could create a
>>>>>>>> naming pattern to cause the factory to apply the values
>>>>>>>> correctly -- this is made more difficult, however, b/c there
>>>>>>>> are multiple TableColumns and the values may vary between the
>>>>>>>> TableColumns.
>>>>>>>>
>>>>>>>> So we need to know what properties will be supported directly
>>>>>>>> by your proposed "data" property (if any), and which will
>>>>>>>> require additional properties in the jsf file delegate. For
>>>>>>>> example:
>>>>>>>>
>>>>>>>> <sun:table ...>
>>>>>>>> <sun:dynamicColumnTableRowGroup
>>>>>>>> data="#{dataPlusPropertiesForAllTableColumns}"
>>>>>>>> [tableRowGroup properties here] />
>>>>>>>> </sun:table>
>>>>>>>>
>>>>>>>> OR:
>>>>>>>>
>>>>>>>> <sun:table ...>
>>>>>>>> <sun:dynamicColumnTableRowGroup data="#{dataOnly}"
>>>>>>>> columnVisible="#{listOfVisibleValuesOneForEachColumn}"
>>>>>>>> columnSortIcon="#{listOfSortIconValuesOneForEachColumn}"
>>>>>>>> ...
>>>>>>>> [TableRowGroup properties here] />
>>>>>>>> </sun:table>
>>>>>>>>
>>>>>>>> As you can see, the first approach requires a complex data
>>>>>>>> structure that you must populate. The 2nd approach requires you
>>>>>>>> to create the same order of complexity, however, it is
>>>>>>>> distributed among multiple List objects which contain the
>>>>>>>> properties to set for each column.
>>>>>>>>
>>>>>>>> What do you think?
>>>>>>>>
>>>>>>>> A 1-off solution wouldn't have to be so generic and could be
>>>>>>>> more specific to your data and needs. You could use either the
>>>>>>>> "binding" attribute, or a custom factory (like above), but it
>>>>>>>> would allow to only do the work you need for your use case.
>>>>>>>>
>>>>>>>> Ken
>>>>>>>>
>>>>>>>> Karam Singh Badesha wrote:
>>>>>>>>
>>>>>>>>> Here is example of how it might look like in .jsf file:
>>>>>>>>>
>>>>>>>>> <sun:table data="#{pageSession.tableData}"
>>>>>>>>>
>>>>>>>>> .../>
>>>>>>>>>
>>>>>>>>> tableData will have all the column tag information and in the
>>>>>>>>> .jsf page there will be no column tags. Please suggest a way
>>>>>>>>> to take care of this. It is not really my app specific, it can
>>>>>>>>> be used by anyone.
>>>>>>>>>
>>>>>>>>> thanks
>>>>>>>>> Karam
>>>>>>>>>
>>>>>>>>> Karam Singh Badesha wrote:
>>>>>>>>>
>>>>>>>>>> Ken,
>>>>>>>>>> Here is an example of what I am trying to do:
>>>>>>>>>>
>>>>>>>>>> Right now in the .jsf page I have to list the column tag with
>>>>>>>>>> header etc. I have the situation where I have drop down boxes
>>>>>>>>>> and depending upon different selections, number of columns
>>>>>>>>>> and column headers could change. And I want the control to be
>>>>>>>>>> defined in the Resources file, etc number of columns, column
>>>>>>>>>> headers etc. I am not sure how it will work myself, as the
>>>>>>>>>> jsf code is changing (when number of columns change). I think
>>>>>>>>>> when we talked last time, you suggested that I somehow create
>>>>>>>>>> the table object in java code (handler) and pass it to the
>>>>>>>>>> page. What do you suggest? Let me know if this is clear or not.
>>>>>>>>>>
>>>>>>>>>> thanks
>>>>>>>>>> Karam
>>>>>>>>>>
>>>>>>>>>> Ken Paulsen wrote:
>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> Hi Karam,
>>>>>>>>>>>
>>>>>>>>>>> I can look into doing this... however, after reading the
>>>>>>>>>>> issue more closely, I need some more information from you.
>>>>>>>>>>> How do you want to specify the table columns from the page?
>>>>>>>>>>>
>>>>>>>>>>> TableColumns typically have children, so they'd also have to
>>>>>>>>>>> be created. Do you want those to just be staticText? Or do
>>>>>>>>>>> you want control over what type they are also? Which
>>>>>>>>>>> TableColumn attribute do you want control over? Perhaps you
>>>>>>>>>>> can provide an example of what you'd like it to look like in
>>>>>>>>>>> the .jsf file?
>>>>>>>>>>>
>>>>>>>>>>> After looking at this more closely, I suspect this may end
>>>>>>>>>>> up being custom for your needs. However, if I can keep it
>>>>>>>>>>> generic and useful for others as well, I will.
>>>>>>>>>>>
>>>>>>>>>>> Ken
>>>>>>>>>>>
>>>>>>>>>>> Karam Singh Badesha wrote:
>>>>>>>>>>>
>>>>>>>>>>>> Hi Ken,
>>>>>>>>>>>> Is it possible to get a solution for issue #10 in
>>>>>>>>>>>> jsftemplating? I really need some solution for this so that
>>>>>>>>>>>> create dynamic tables. Please let me know.
>>>>>>>>>>>>
>>>>>>>>>>>> thanks
>>>>>>>>>>>> Karam
>>>>>>>>>>>
>>>>>>>>>