Ist einer der Items durch einen Mehrfachwert definiert worden, muss das entsprechende Item anders behandelt werden. Eine Definition wie folgt…
<xp:comboBox id="comboBox1"> <xp:selectItems> <xp:this.value><![CDATA[#{javascript: var vItem = new java.util.Vector(); vItem.add("A|1"); vItem.add("B|2"); vItem.add("C|3"); vItem }]]></xp:this.value> </xp:selectItems> </xp:comboBox>
…ist auch intern als Array zu behandeln. Eine Funktion, die mit beiden Item-Typen umgehen kann (auch im Mix), kann dann wie folgt aufgebaut sein:
function getSelectableValues( id ) { var ComboBox = getComponent( id ); var ChildrenList:java.util.ListIterator; ChildrenList = ComboBox.getChildren().listIterator() while (ChildrenList.hasNext()) { var Child = ChildrenList.next(); if( typeof( Child ) == 'com.ibm.xsp.component.UISelectItemsEx' ){ var hlp = Child.getValue(); for( var i=0; i< hlp.length; i++ ){ print( hlp[i].getLabel() + "|" + hlp[i].getValue() ); hlp[i].setLabel("ABC" + i ); hlp[i].setValue("123" + i ); hlp[i].setDisabled(true); } Child.setValue(hlp); } if( typeof( Child ) == 'com.ibm.xsp.component.UISelectItemEx' ){ print( Child.getItemLabel() + "|" + Child.getItemValue() ); } } } getSelectableValues( 'comboBox1' );
[Fett: Wenn Änderungen am Mehrfachwert-Item vorgenommen werden, muss das Item nach der Bearbeitung mit „setValue()“ erneuert werden]
Die Namen der Methoden sind ohne „Item“ zu verwenden, z.B. setItem() anstelle von setItemValue().
Der letzte Satz ist natürlich nicht korrekt: Anstelle von setItem() muß es natürlich setValue() heißen…