默认值将根据从LOV中选择的值存储在另一列中

时间:2018-11-19 06:19:28

标签: oracle-adf

表格-Items

Columns-Order_Type

               (Sales,
               Return,
               Defective)

Order_Type_Id(1,2,3) 即1笔销售,                2回车                3-次品

VO具有Transient属性-OrderType,该属性具有显示Order_Type的LOV。 根据所选的Order_Type,Order_Type_Id应该存储在Order_Type_Id列中

public Number getOrder_Type_Id() {
    String orderType = null;
    Number orderNumber = null;
    if (getOrderType() != null) {
        orderType = getOrderType();
        if (orderType.equals("Sales")) {
            orderNumber = new oracle.jbo.domain.Number(2);
        } else if (orderType.equals("Return")) {
            orderNumber = new oracle.jbo.domain.Number(3);
        } else if (orderType.equals("Defective")) {
            orderNumber = new oracle.jbo.domain.Number(4);
        }
        this.setOrder_Type_Id(orderNumber);
    }

2 个答案:

答案 0 :(得分:1)

以下代码有效。 在Order_Type_Id中编写以下代码:

public Number Order_Type_Id()
{ 
String orderType=null;
Number orderNumber=null;
if(getOrder_Type()!=null){
orderType=getOrder_Type();
if(orderType.equals("Sales")){
orderNumber=new oracle.jbo.domain.Number(2);
}
else if(orderType.equals("Defective")){
orderNumber=new oracle.jbo.domain.Number(3);
return orderNumber;
}
else
{
return (Number)getAttributeInternal(Order_Type_Id);}
}
}

在Order_Type_Id属性中添加依赖项或Order_Type

答案 1 :(得分:0)

假设LOV VO也来自查询而不是来自静态列表:

它是在ADF 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中所选值的ID。

同样适用于静态列表VO。

根据您的要求,以编程方式

我已经创建了一个有关LOV值更改侦听器的方法,

changeValue()是bean类中的方法。

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的位置。

AppModuleClass的

assingValue(),它将根据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中,参数是将从bean类输入的值(从LOV中选择的值),然后返回String参数,该参数将在bean类中再次使用。

因此,当您在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(在bean中声明)。还为输出标签创建了绑定。因为outputLabel依赖于LOV,所以为PartialTrigger分配了LOV。