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());
}