cocoon-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Alexander Malic <Alexander.Ma...@workflow.at>
Subject Re: SOLVED Problem with Binding of fd:multivaluefield
Date Wed, 28 Mar 2007 18:43:32 GMT
hi again,

after some debugging in cocoon i realized that the multi-value issue was 
not working because the fact that the row-path must not be an attribute.

<fb:multi-value id="selectedGroups" parent-path="selectedGroups" row-path=
"group/@uid"/> 
->
<fb:multi-value id="selectedGroups" parent-path="selectedGroups" row-path=
"group"/> 

regards,
alex




Alexander Malic <Alexander.Malic@workflow.at> 
27.03.2007 15:15
Please respond to
users@cocoon.apache.org


To
users@cocoon.apache.org
cc

Subject
Problem with Binding of fd:multivaluefield







hi there, 

i have a form with a repeater containing a multivaluefield. 

i noticed following issues: 
        - when i submit the form, the selected items (the ones in the 
right select-multiple-box) are not selected 
        - when i select them manually before submitting only the last 
value is saved 

below is my sample 

regards, alex 

btw: i'm using cocoon 2.1.10 

here's the snipped of the repeater in the definition 
            <fd:repeater id="selection"> 
                    <fd:widgets> 
                            <fd:field id="selectedClient"> 
                                    <fd:datatype base="string"/> 
                                    <fd:label><i18n:text>
ta_createRebookings.job_selectedClient</i18n:text></fd:label> 
                                    <fd:selection-list/> 
                                    <fd:on-value-changed> 
                                            <javascript> 
                                                    var 
widget=event.source; 
                                                    var 
gWidget=widget.lookupWidget('../selectedGroups'); 
 
 if(widget.getValue()!=null){ 
 gWidget.setState(ACTIVE); 
                                                            var 
client=PoOrganisationService.getClient(widget.getValue()); 
                                                            var 
orgHierarchy=PoOrganisationService.getOrgHierarchy(client); 
                                                            var 
topLevelGroup=orgHierarchy.getTopLevelGroup(); 
                                                            var 
clientsGroups=PoOrganisationService.findAllChildGroupsFlat(orgHierarchy.getTopLevelGroup());


 gWidget.setSelectionList(clientsGroups,"UID","shortName"); 
                                                    } else { 
 gWidget.setState(INVISIBLE); 
                                                    } 
                                            </javascript> 
                                    </fd:on-value-changed> 
                            </fd:field> 
                            <fd:multivaluefield id="selectedGroups" state=
"invisible"> 
                                    <fd:datatype base="string"/> 
                                    <fd:label><i18n:text>
ta_createRebookings.job_selectedGroups</i18n:text></fd:label> 
                                    <fd:selection-list/> 
                            </fd:multivaluefield> 
                            <fd:row-action id="deleteSelection" command=
"delete"> 
                                    <fd:label><i18n:text>po_delete
</i18n:text></fd:label> 
                            </fd:row-action> 
                    </fd:widgets> 
            </fd:repeater> 
            <fd:repeater-action id="addSelection" command="add-row" 
repeater="selection"> 
                    <fd:label><i18n:text>po_add</i18n:text></fd:label>

                    <fd:on-action> 
                            <javascript> 
                                    var widget=event.source; 
                                    var 
repeater=widget.lookupWidget('../selection'); 
                                    if(repeater.getSize()>0){ 
                                            var 
lastRow=repeater.getRow(repeater.getSize()-1); 
                                            var 
cWidget=lastRow.lookupWidget('selectedClient'); 
                                            var 
allClients=PoOrganisationService.loadAllClients(); 
                                            allClients.add(0,null); 
 cWidget.setSelectionList(allClients,'UID','name'); 
                                    } 
                            </javascript> 
                    </fd:on-action> 
            </fd:repeater-action>


here's the template-snippet: 
            <table> 
                    <tr> 
                            <th><ft:repeater-widget-label id="selection" 
widget-id="selectedClient"/></th> 
                            <th><ft:repeater-widget-label id="selection" 
widget-id="selectedGroups"/></th> 
                            <th/> 
                    </tr> 
                    <ft:repeater-widget id="selection"> 
                            <tr> 
                                    <td> 
                                            <ft:widget id="selectedClient"
> 
                                                    <fi:styling 
submit-on-change="true"/> 
                                            </ft:widget> 
                                    </td> 
                                    <td> 
                                            <ft:widget id="selectedGroups"
> 
                                                    <fi:styling list-type=
"double-listbox"> 
                                                            
<fi:available-label><i18n:text>
ta_createRebookings.job_selectedGroups_Available
</i18n:text></fi:available-label> 
                                                            
<fi:selected-label><i18n:text>
ta_createRebookings.job_selectedGroups_Selected
</i18n:text></fi:selected-label> 
                                                    </fi:styling> 
                                            </ft:widget> 
                                    </td> 
                                    <td><ft:widget id="deleteSelection"
/></td> 
                            </tr> 
                    </ft:repeater-widget> 
            </table> 
            <ft:widget id="addSelection"/>


and here's the binding-snippet: 
        <fb:repeater id="selection" parent-path="selections" row-path=
"selection"> 
                <fb:javascript id="selectedClient" path="client/@uid"> 
                        <fb:load-form> 
                                var 
allClients=PoOrganisationService.loadAllClients(); 
                                allClients.add(0,null); 
                                java.lang.System.out.println("allClients: 
" + allClients); 
 widget.setSelectionList(allClients,"UID","name"); 
                                widget.setValue(jxpathPointer.getValue()); 

                        </fb:load-form> 
                        <fb:save-form> 
                                jxpathPointer.setValue(widget.getValue()); 

                        </fb:save-form> 
                </fb:javascript> 
                <fb:multi-value id="selectedGroups" parent-path=
"selectedGroups" row-path="group/@uid"/> 
        </fb:repeater>


Mime
View raw message