Oracle ADF > Получить выбранное значение из SelectOneChoice


Вариант 1 (100% рабочий):


1
2
3
4
5
6
7
8
9
<af:selectOneChoice value="#{bindings.AttributeBindingsName.inputValue}"
                    autoSubmit="true"
                    label="#{bindings.AttributeBindingsName.label}"
                    required="#{bindings.AttributeBindingsName.hints.mandatory}"
                    shortDesc="#{bindings.AttributeBindingsName.hints.tooltip}" id="soc1"
                    valueChangeListener="#{MyBean.onSelect}">
    <f:selectItems value="#{bindings.AttributeBindingsName.items}" id="si1"/>
    <f:validator binding="#{bindings.AttributeBindingsName.validator}"/>
</af:selectOneChoice>


В bindings определен как list

1
2
3
4
5
6
7
8
9
10
11
12
public void onSelect(ValueChangeEvent valueChangeEvent) {

    // Эта строка нужна, чтобы итератор переключился на выбранную сторку VO
    valueChangeEvent.getComponent().processUpdates(FacesContext.getCurrentInstance());


    // RichSelectOneChoice soc = (RichSelectOneChoice)valueChangeEvent.getComponent();
    // System.out.println("Index: " + soc.getValue().toString());

    Object value = ADFUtils.findIterator("ITERATOR_NAME").getCurrentRow().getAttribute("ATTRIBUTE_NAME");
    System.out.println("Value " + value.toString());
}


Разумеется аттрибут должен быть определен во ViewObject.


Вариант 2 (100% рабочий):

Использовать, когда SelectOneChoice возвращает индекс элемента, а не его значение:

В этом случае, можно сделать так.

1
2
3
4
5
6
7
8
9
public void onSelect(ValueChangeEvent valueChangeEvent) {

    RichSelectOneChoice soc = (RichSelectOneChoice)valueChangeEvent.getComponent();

    // Value

    Object value = ADFUtils.findIterator("ITERATOR_NAME").getRowAtRangeIndex((Integer)soc.getValue()).getAttribute("ATTRIBUTE_NAME");
    System.out.println("Value " + value.toString());
}