动态改变LOV的值集

2014-09-17(Wednesday) 00:00

需求:

LOV的值集需要根据传入的用户角色类型(A,B,C)动态改变,A时查询所有,B时过滤字段1,C时过滤字段2.

基础VO的SQL如下: SELECT DISTINCT U.USER_ID, U.USER_NAME, F.FULL_NAME AS DESCRIPTION FROM FND_USER U, PO_HEADERS_ALL P, PO_VENDORS V, PER_PEOPLE_F F WHERE U.EMPLOYEE_ID = P.AGENT_ID AND P.VENDOR_ID = V.VENDOR_ID AND F.PERSON_ID(+) = U.EMPLOYEE_ID AND P.APPROVED_FLAG = 'Y' AND ((P.VENDOR_ID = :VARVENDORID AND :VARUSERTYPE = 'B') OR (:VARUSERTYPE = 'A') OR (:VARUSERTYPE = 'C' AND U.USER_ID = :VARUSERID)) 创建VARUSERTYPE VARUSERID VARVENDORID 三个绑定变量。

创建LOV VO

LVO的SQL如下: SELECT NULL AS USER_ID, NULL AS USER_NAME, NULL AS DESCRIPTION, :VARTYPE AS USERTYPE,
:VARVENDORID AS VENDORID, :VARUSERID AS CURRENTUSERID FROM DUAL 技巧在这里,LVO同样创建三个绑定变量,并把绑定变量作为VO的attribute暴露出来,然后通过view Accessors传递给基础VO

设置View Accessors

  • 创建LOV

  • 设置View Accessors

这样就可以实现动态切换LOV的基础数据源了。

Category: ADF Tagged: LOV


"定制EL function"

2014-02-07(Friday) 00:00
  • 平台: Jdeveloper 12c

  • 有时需要对字符串进行一些后再显示出来,可以写一个简单的taglib来实现,以下Demo是处理一个以冒号分隔的字符串,返回其中的第三个值。比如输入“aaa:bbb:ccc:ddd",输出"ccc"。

实现方法

创建一个空的java Project:Taglib

  • 创建Java类:SplitString.java

{% codeblock lang:java %}

package cn.dengdezhao.taglib;

public class SplitString {

public static String getString(String string) {
    String[] strings = string.split(":", 3);
    if (strings.length > 2) {
        return strings[2];
    } else …

Category: ADF Tagged: EL

Read More

"控件af:iterator以及af:forEach的对比"

2013-09-23(Monday) 00:00
  • 平台:Jdeveloper 12c

  • 需求:对Collection类型遍历。MB中定义两个List,如何利用iterator&foreach控件将List内容显示到页面。

页面如下

分别绑定iterBean中的两个集合类型变量,将其中的值取出来。

{% codeblock lang:java %}

BackingBean内容如下:

{% codeblock lang:java %} package cn.dengdezhao; import java.util.ArrayList; import java.util.List; public class IteratorBean { List list = new ArrayList(); String[] values=new String[]{"1","2","3"}; List testList=new ArrayList();

public void setTestList …

Category: ADF Tagged: iterator foreach

Read More

"如何在页面碎片加载前调用逻辑"

2013-09-23(Monday) 00:00
  • 平台:Jdeveloper 12c

  • 需求:在JSPX页面加载前如果需要调用逻辑可以通过重写PhaseListener实现,如果在JSFF页面碎片加载前(也即是region加载前)调用应该如何实现?

实现方法

重写RegionController方法可以达到以上需求。

  • 重写 RegionController类,在refreshRegion方法中加入需要调用的逻辑即可在页面碎片加载之前调用。

{% codeblock lang:java %} package cn.dengdezhao; import oracle.adf.model.RegionContext; import oracle.adf.model.RegionController; public class myController implements RegionController { public myController() { super(); } @Override public boolean refreshRegion(RegionContext regionContext) { // TODO Implement this method int flag=regionContext …

Category: ADF Tagged: RegionController

Read More

"如何获取web.xml中的context-param参数"

2013-09-04(Wednesday) 00:00

通过EL表达试获取

以web.xml中的参数:javax.faces.FACELETS_VIEW_MAPPINGS为例, 可通过以下EL获取。
{% codeblock lang:java %}
${initParam['javax.faces.FACELETS_VIEW_MAPPINGS']}

如果参数名称很简单,比如:testParameter,EL表达式也可以写成以下方式:
{% codeblock lang:java %}
${initParam.testParameter}

通过JAVA代码获取

如果需要在MB方法中获取该参数值,可以参照以下代码: {% codeblock lang:java %}
public String action() { FacesContext fctx=FacesContext.getCurrentInstance(); ExternalContext ec=fctx.getExternalContext(); ServletContext servletContext=(ServletContext)ec.getContext(); String value=servletContext.getInitParameter …

Category: ADF Tagged: context-param

Read More

"Attribute set for xxxAttribute in view object xxxVO failed问题解决"

2013-06-19(Wednesday) 00:00

平台:Jdeveloper 9i

异常描述:

在表增加单选checkbox时,在VO中创建transient属性selector,最终在页面中无法勾选checkbox,发现值没法保存到VO中,页面抛出该异常:
{% codeblock lang:java %}
null - Attribute set for Selector in view object employeeVO1 failed

解决方案:

  1. 检查VO中的transient属性selector是否设置为updatable
  2. 如果是在开发模式下,清空所有classes文件,重新编译;如果是在正式环境,删除该路径下的VO对象,可使用以下命令。
    {% codeblock lang:java %} exec jdr_utils.deletedocument('/oracle/apps/dengdezhao/test/server/employeeVO');

Category: ADF Tagged: AttributeSet

Read More

"从BackingBean中调用不带fragments的taskflow"

2013-06-08(Saturday) 00:00

有时候需要在backingBean中调用某一taskflow, 可以使用以下代码调用。不过只适用于可单独运行的taskflow,含有page fragments的taskflow不在此范围。

代码如下:
{% codeblock lang:java %} public String callTaskFlow() { FacesContext fctx = FacesContext.getCurrentInstance(); ControllerContext cc = ControllerContext.getInstance(); String taskflowId = "btf_task"; String taskflowDocument = "/WEB-INF/btf_task.xml"; Map params = new HashMap(); TaskFlowId tid = new TaskFlowId(taskflowDocument, taskflowId); String taskflowURL = cc.getTaskFlowURL(false, tid, params); ExtendedRenderKitService …

Category: ADF Tagged: taskflow

Read More

"分页栏出现3个问号BUG解决"

2013-06-06(Thursday) 00:00

平台:Jdeveloper 11.1.1.7.0


BUG描述 标准控件af:table,“页”字前后出现三个问号。

原因分析

查看LOG文件
{% codeblock lang:java %} 无法从外观 mySkin.desktop 获取资源关键字 页

可见是RenderingContext类中getTranslatedString方法发生异常。
查看源代码分析:

找到源代码所在位置

将JAR包解压得到RenderingContext类,反编译查看

结果如下RenderingContext.class
{% codeblock lang:java %} public String getTranslatedString(String key) { if (key == null) return null; try { return getSkin().getTranslatedString(getLocaleContext(), key); } catch …

Category: ADF Tagged: ADF

Read More

"Groovy在ADF中的应用"

2013-06-02(Sunday) 00:00

使用Groovy脚本,在开发ADF应用中可以极大地提高开发效率,实现某些看似很复杂的功能。

比如在empVO中获取sequence值:
{% codeblock lang:java %} db = adf.object.getDBTransaction()
sq = new oracle.jbo.server.SequenceImpl("EMPLOYEES_SEQ",db)
sq.getSequenceNumber()

在empVO中获取Salary字段最大值max:
{% codeblock lang:java %} adf.object.getRowSet().max("Salary")

在empVO中获取Salary字段最小值min:
{% codeblock lang:java %} adf.object.getRowSet().min("Salary")

在empVO中获取Salary字段合计sum:
{% codeblock lang:java %} adf.object.getRowSet().sum("Salary")

在empVO中获取Salary字段均值avg:
{% codeblock …

Category: ADF Tagged: groovy

Read More

"利用contextual event刷新Region"

2013-06-01(Saturday) 00:00

平台: Jdev 11.1.1.7.0
需求:两个region,其中一个region对数据进行修改后,需要刷新另外一个region显示



创建bound taskflow: btf_form

../../../wp-content/uploads/QQ截图20130601204146.jpg

taskflow只包括一个页面碎片empForm.jsff,拖入employeeVO生成af:Form。
../../../wp-content/uploads/QQ截图20130601210114.jpg

创建bound taskflow: btf_table

同上,只有一个页面碎片empTable.jsff,拖入employeeVO生成af:table。
../../../wp-content/uploads/QQ截图20130601210258.jpg

以上两个taskflow皆使用No Controller Transaction.

添加contextual event

需要在empTable.jsff页面中修改数据,单击commit按钮时,让empForm.jsff页面中的数据即时更新。因此,给commitbutton添加contextual event: saveEvent。
../../../wp-content/uploads/QQ截图20130601210725.jpg

创建mainPG页面引入以上taskflow生成region

创建一个两栏jspx页面mainPG.jspx, 分别拖入以上两taskflow生成region。
给contextual event 绑定consumer。

切换到mainPG.jspx页面的pagedef页面,从structure窗口中执行以下操作 …

Category: ADF Tagged: region

Read More
Page 1 of 4

Next »