2010年4月4日星期日

ADF_060:如何使用PropertySet特性?

开发环境:JDeveloper 11.1.2.2.0 + Oracle XE Database 10gR2。

想要了解PropertySet特性,就必须先了解Custom Properties特性。
你可以为EO或VO的某个字段定义Custom Properties,然后再程序中访问该Custom Properties。
在《ADF-BC中EO常用操作代码之三:增加EO(1)》中,我们就为DepartmentId定义了一个Custom Properties:SequenceName。

这里我分别先后使用Custom Properties和PropertySet特性来实现数据大小写。

1. 使用Custom Properties实现数据大小写
(1)在JobTitle上设置一个Custom Properties:CASE。

(2)重写EOImpl的setJobTitle方法。
    /**
     * Sets value as the attribute value for JobTitle.
     * @param value value to set the JobTitle
     */
    public void setJobTitle(String value) {
        for (AttributeDef def : getEntityDef().getAttributeDefs()) {
            String caseProperty = (String)def.getProperty("CASE");
            if (caseProperty != null && !caseProperty.equals("")) {
                if (caseProperty.equals("Uppercase")) {
                    value = value.toUpperCase();
                } else if (caseProperty.equals("Lowercase")) {
                    value = value.toLowerCase();
                } else {
                    // Do nothing; unknown value
                }
            }
        }        
        setAttributeInternal(JOBTITLE, value);
    }

(3)运行AM。
修改JobTitle,设置为小写的值。

点击其它地方,发现JobTitle的值自动变为大写了。


2. 使用PropertySet实现数据大小写
假设如果需要为很多EO/VO的字段设置很多个Custom Properties,那么定义起来工作量将会非常大,非常乏味,而且容易出错。
为此,你可以把这些个Custom Properties组合在一起,定义为一个PropertySet。
这样你只需要为每个EO/VO的字段定义一次,效率提高的同时,出错的可能性也几乎为零。

(1)创建PropertySet

(2)在PropertySet定义中增加Custom Properties

(3)选择JobTitle字段,设置PropertySet属性,指向刚刚定义的PropertySet

(4)重写EOImpl的setJobTitle方法。
    /**
     * Sets value as the attribute value for JobTitle.
     * @param value value to set the JobTitle
     */
    public void setJobTitle(String value) {
        for (AttributeDef def : getEntityDef().getAttributeDefs()) {
            String lowerCaseProperty = (String)def.getProperty("LowerCase");
            if (lowerCaseProperty != null && lowerCaseProperty.equals("Y")) {
                value = value.toLowerCase();
            }
        }
        setAttributeInternal(JOBTITLE, value);
    }

(5)运行AM。
修改JobTitle,设置为大写的值。

点击其它地方,发现JobTitle的值自动变为小写了。

另外,运行时,你可以右键JobTitle,会显示出该字段都定义了有哪些Custom Properties


Project 下载:ADF_BC_CustomProperties.7z ADF_BC_PropertySet.7z

参考文献:
1. http://hi.baidu.com/kill/blog/item/569bf6039281ba7c3912bb47.html
2. https://blogs.oracle.com/raghuyadav/entry/adf_custom_properties_and_prop
3. http://one-size-doesnt-fit-all.blogspot.jp/2008/09/jdev-11g-adf-bc-new-feature-property.html
4. http://www.avromroyfaderman.com/2008/07/the-power-of-properties/#more-80
5. http://one-size-doesnt-fit-all.blogspot.jp/2007/06/i-rest-my-case-converting-adf-bc-eovo.html

没有评论: