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…