EBS OAF 开发中的OAMessageRadioGroup控件

90 篇文章 1 订阅
83 篇文章 1 订阅

EBS OAF 开发中的OAMessageRadioGroup控件

(版权声明,本人原创或者翻译的文章如需转载,如转载用于个人学习,请注明出处;否则请与本人联系,违者必究)

简介

RadioGroup控件在OAF12.2.4及之前的开发文档中没有想关介绍,也没有任何示例程序中有相关应用。在网上有介绍说,它是和radiobutton一块使用,其ID作为RadioButton的group name使用,并且有相关例子。但是这是错误的,本文就是用来介绍RadioGroup控件,并有相应的代码示例。

RadioGroup控件并不能和RaidioButton控件一块使用,它也和RadioButton控件关系不大,因为你使用它的时候,根本不需要手工添加任何RadioButton控件。它实际是和MessageChoice(Poplist)很像,或者说完全和MessageChoice功能一样,都是值对形式,只是显示形式不一样, MessageChoice显示为下拉菜单,而RadioGroup就显示为一组RadioButton。

MessageChoice会为其对应的VO中的每条记录在下拉列表生成一条记录;而RaidoGroup会为VO中的没条记录生成一个Radiobutton.

示例介绍

实现后的页面如下,如果选择了Quick Mode,下面利用PPR事件来先Quick Mode相关的区域(Region);如果选择了Standard Mode,下面利用PPR事件来显示Standard Mode相关的区域。


其页面声明式定义如下图,包含一个RadioGroup控件极其下面根据其值要显示的两个区域。

 

示例实现步骤

1.      就像上面说的,因为RadioGroup和MessageChoice(Poplist)很像,所以我们也需要为这个控件建立一个相应的VO,这里的VO是RadioGroupVO,这很简单,只是从表AK_SEARCH_MODE中查询出要使用的值对而已。


这里表是我自己建立的,如果要用的话,建议使用EBS lookup,这样可以完美解决多语言问题等,我使用的脚本如下:

CREATETABLE AK_SEARCH_MODE

(search_modeVARCHAR2(20)   NOT NULL,

mode_valueVARCHAR2(20));

 

INSERTINTO AK_SEARCH_MODE VALUES ('Quick Mode', 'QUICK');

INSERT INTO AK_SEARCH_MODE VALUES ('Standard Mode','STANDARD');

2.      建立好VO,我们需要建立AM。这里可以把上面的VO加到AM中,也可以不加,这和poplist一样,根据需要,因为poplist和radiogroup都可以直接使用VO的长名称(包括路径),也可以使用VO的示例名。

3.      建立页面结构,就像上面看到的一样,这里为RadioGroup控件设置如下,其实完全和MessageChoice(poplist)完全一样。


4.      因为我们要触发PPR事件,所以,这里也使用了PVO,其中加了两列分别用于控制当选择不同的mode时显示不同的区域。

5.      因为添加了PVO,所以我们需要在请求页面的时候,要初始化PVO,需要对这个页面添加CO,并在AM和VO里添加下面的代码。

AM代码:

 

public void initPVOAndRadioGroupVO()

  {

    OAViewObjectImpl pvo = getRadioGroupPVO1();

    if(pvo!=null &&pvo.getFetchedRowCount()==0)

    {

      pvo.setMaxFetchSize(0);

      pvo.executeQuery();

      Row pvoRow = pvo.createRow();

     pvoRow.setAttribute("RenderQuickRN", Boolean.TRUE);

     pvoRow.setAttribute("RenderStdRN", Boolean.FALSE);

     pvoRow.setNewRowState(Row.STATUS_INITIALIZED);

      pvo.insertRow(pvoRow);

 

      RadioGroupVOImpl mainVo =this.getRadioGroupVO1();

      mainVo.executeQuery();

    }

  }


CO代码:

 

 public void processRequest(OAPageContextpageContext, OAWebBean webBean)

  {

    super.processRequest(pageContext, webBean);

    OAApplicationModule am = pageContext.getApplicationModule(webBean);

   am.invokeMethod("initPVOAndRadioGroupVO");

  }

6.      设置页面中不同mode对应区域的render属性利用EL来绑定到PVO上建立的两个属性来实现PPR。


7.      在第三步为RadioGroup添加了PPR事件,所以需要在AM和CO做相应的处理,代码如下,这里我们根据RadioGroup控件的值通过AM来设置PVO的值,然后根据PVO来动态显示不同的区域。

AM中的代码:

 

 public void handleRadioBtnChanged(Stringmode)

  {

    Row pvoRow = getRadioGroupPVO1().first();

    if("QUICK".equals(mode))

    {

     pvoRow.setAttribute("RenderQuickRN", Boolean.TRUE);

     pvoRow.setAttribute("RenderStdRN", Boolean.FALSE);

    }

    else

    {

     pvoRow.setAttribute("RenderQuickRN", Boolean.FALSE);

     pvoRow.setAttribute("RenderStdRN", Boolean.TRUE);

    }

  }

CO中的代码:

 

public void processFormRequest(OAPageContextpageContext, OAWebBean webBean)

  {

    super.processFormRequest(pageContext,webBean);

    OAApplicationModule am =pageContext.getApplicationModule(webBean);   

    String event = pageContext.getParameter(OAWebBeanConstants.EVENT_PARAM);

    String source =pageContext.getParameter(SOURCE_PARAM);

   if(event.equals("handleModeChange"))

    {

      OAMessageRadioGroupBean radioGroupBean =(OAMessageRadioGroupBean)webBean.findChildRecursive("ModeRadioGroup");

      String mode =(String)radioGroupBean.getValue(pageContext);

      Serializable[]  paras = { mode };

     am.invokeMethod("handleRadioBtnChanged", paras);

    }

  }

这样一个简单的RadioGroup控件示例就完成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值