Предполагается, что LOV VO также из запроса, а не из статического списка:
Разработано в АПД 11g
OrderTypeLOVVO:
order_type_id - back-end stored column
order_type_desc - display column
BaseOrderVO
OrderTypeId - transient attribute - LOV - OrderTypeLOVVO
OrderTypeDesc - transient attribute - OutputText column with default value - 1
orderTypeId
- Make autoSubmit property true in both places in VO and in jsff page ( drop it as select one choice) .
- OrderTypeId value will be bindings.orderTypeId.inputValue
- Shuffle the dependent attribute Order_type_desc from left to right in dependecies component of VO.
OrderTypeDesc
Make default value as 1 and in jsff page set partial trigger dependent of orderTypeId after dropping it as output label.
Make OrderTypeDesc value attribute as bindings.orderTypeId.attributeValue
Нам нужно сделать значение OrderTypeDesc как orderTypeId.attributeValu e, потому что когда вы выбираете OrderTypeId в качестве продаж (это inputValue ), то значение бэкенда (id ) равен 1. поэтому attributeValue получит идентификатор выбранного значения в LOV.
То же самое работает и со статическим списком VO.
В соответствии с вашим требованием, В программно,
Я создал метод для прослушивания изменения значения LOV,
changeValue()
- метод в классе бобов.
public void changeValue(ValueChangeEvent valueChangeEvent) {
AppModuleImpl module = getApp(); // creating appModuleImpl class object
//definition for getApp() is given below.
item_desc = module.assignValue(valueChangeEvent.getNewValue().toString());
// This item_desc value is declared globally.
//assignValue method of AppModuleClass is given below
bind_item_desc.setValue(item_desc);
AdfFacesContext adfFacesContext = AdfFacesContext.getCurrentInstance();
adfFacesContext.addPartialTarget(bind_item_desc);
// bind_item_desc is the binding attribute of output label which needs to be refreshed.
// Add event code here...
}
public static AppModuleImpl getApp() {
return (AppModuleImpl)Configuration.
createRootApplicationModule(
"Model.AppModule", // where your module is stored
"AppModuleShared"); // chosen configuration
}
Здесь Model.AppModule
- расположение AppModule.
assingValue()
из AppModuleClass, где он будет присваивать значение в соответствии с выбранным значением в LOV.
public String assignValue(String value)
{
String item_desc=null;
System.out.println("Changed value " + value);
if(value.equals("Sales"))
{
item_desc="14";
}
return item_desc;
}
В assignValue параметр - это значение, которое будет вводиться из класса бина (выбранное значение из LOV) и возвращать параметр String, который вам понадобится снова в классе бина.
Поэтому, когда вы выбираете значение в LOV, он вызывает метод прослушивателя изменения значения (changeValue ()) и переходит к AppModule. В AppModule значение будет присвоено и возвращено в класс Bean.
Но это не будет отражаться до тех пор, пока вы не обновите компонент страницы.
<af:selectOneChoice value="#{bindings.item_id_lov.inputValue}"
label="item for lov"
required="#{bindings.item_id_lov.hints.mandatory}"
shortDesc="#{bindings.item_id_lov.hints.tooltip}"
id="soc4" autoSubmit="true"
valueChangeListener="#{bean1.changeValue}">
<f:selectItems value="#{bindings.item_id_lov.items}" id="si4"/>
</af:selectOneChoice>
Здесь слушатель изменения значения вызывается в SelectOneChoice, а autoSubmit имеет значение true.
<af:panelLabelAndMessage label="item description"
id="plam1" partialTriggers="soc4">
<af:outputFormatted value="#{bean1.item_desc}" binding="#{bean1.bind_item_desc}"
id="of1"/>
</af:panelLabelAndMessage>
Здесь в value
назначен атрибут item_desc
(который объявлен в бине). Также была создана привязка для метки вывода. PartialTrigger присваивается LOV, так как outputLabel зависит от LOV.