[Oracle ADF] SelectOneChoice и RichSelectOneChoice
Обычный SelectOneChoice
<selectOneChoice
id="soc1"
simple="true"
value="#{Bean.list.itemNo}"
unselectedLabel="Please Select">
selectItems
value="#{Bean.listItems}"/>
</af:selectOneChoice>
Блок selectItems - отвечает за то, какие элементы будут отображаться в SelectOneChoice
У нас, он обычно выглядит следующим образом:
<af:selectOneChoice id="soc1" label="Языки программирования" autoSubmit="true">
<af:forEach items="#{bindings.voLanguages.rangeSet}" var="row">
<f:selectItem itemLabel="#{row.id}" itemValue="#{row.language}"/>
</af:forEach>
</af:selectOneChoice>
UIComponent tab1 = Utils.getComponent("tabName");
RichSelectOneChoice mySelectOneChoice = (RichSelectOneChoice)(tab1.findComponent("socDivisAccomp"));
mySelectOneChoice.setValue("0");
// mySelectOneChoice.getValue().toString();
// Для обновления значения элемента на форме
AdfFacesContext.getCurrentInstance().addPartialTarget(mySelectOneChoice);
public static UIComponent getComponent(String compId) {
FacesContext fctx = FacesContext.getCurrentInstance();
UIViewRoot viewRoot = fctx.getViewRoot();
return viewRoot.findComponent(compId);
}
<af:selectOneChoice id="soc1" label="Языки программирования" autoSubmit="true"
binding="#{mainBean.customerName}"
>
<af:forEach items="#{bindings.voLanguages.rangeSet}" var="row">
<f:selectItem itemLabel="#{row.id}" itemValue="#{row.language}"/>
</af:forEach>
</af:selectOneChoice>
// id = 10
customerName.setValue(id);
// customerName.getValue().toString();
// Для обновления значения элемента на форме
AdfFacesContext.getCurrentInstance().addPartialTarget(customerName);
Иногда SelectOneChoice имеет длину большую чем нужно. В нашем случае поле у одной страны было очень большим и оно портило весь внешний вид формы.
Удалось победить следующим образом:
<af:panelFormLayout id="pfl11"
labelAlignment="start"
inlineStyle="width:288px;">
<af:selectOneChoice label="Страна"
id="countryRegPerson"
autoSubmit = "true"
disabled="true"
valueChangeListener="#{main_bean.onChangeCountryRegPerson}">
<af:forEach items="#{bindings.ViewObjCountries11.rangeSet}" var="row1">
<f:selectItem id="si5" itemLabel="#{row1.Country}" itemValue="#{row1.Code}"/>
</af:forEach>
</af:selectOneChoice>
</af:panelFormLayout>
В общем параметр inlineStyle=”width:288px;” как раз и отвечает за размер на форме элемента.
Получить выбранное значение и предыдущее значение SelectOneChoice.
public void onCurrencyChanged(ValueChangeEvent valueChangeEvent) {
String oldValue = valueChangeEvent.getOldValue().toString();
String newValue = valueChangeEvent.getNewValue().toString();
System.out.println(" valueChangeEvent " + oldValue);
System.out.println(" valueChangeEvent " + newValue);
}
valueChangeEvent Рубль
valueChangeEvent Швейцарский франк