在XPage中动态设置和获取bean属性

时间:2014-10-28 17:43:35

标签: java xpages javabeans el

另一个Java问题(我知道这是一个菜鸟):是否可以在自定义控件中使用动态属性绑定和Java bean中的动态属性getter?

我会解释。我在自定义控件中广泛使用此功能:

            <xp:inputTextarea id="DF_TiersM">
                <xp:this.value><![CDATA[#{compositeData.dataSource[compositeData.fieldName]}]]></xp:this.value>

这用于控件,其中数据源和字段名称都作为参数传递。到目前为止这很好用。 现在,在某些情况下,数据源是托管bean。当解释上述行时,显然生成代码以获取或设置......某事物的值。但具体到底是什么?

我收到此错误:错误获取属性&#39; SomeField&#39;来自类型为com.sjef.AnyRecord 的bean,我认为这是正确的,因为我的bean中没有公共的getSomeField()。所有属性都在bean中动态定义。

那么如何让XPage读取属性呢?是否有一个通用的getter(和setter)允许我使用属性的名称作为参数而不是包含在固定的方法名称中?如果XPages没有找到getSomeField(),它会尝试其他方式,例如刚刚得到(字符串名称)左右?

一如既往:非常感谢您的帮助和解答!

1 个答案:

答案 0 :(得分:2)

绑定的工作方式取决于Java对象是否实现了受支持的接口。如果它没有(如果它只是一些随机的Java对象),那么任何属性都被视为&#34; bean-style&#34;名称,这样,如果你想调用&#34; .getSomeField()&#34;,那么绑定就像&#34;#{obj.someField}&#34; (或&#34;#{obj [&#39; someField&#39;]}&#34;等等。)

如果您希望它回归到一个常用方法,那么DataObjectMap接口的作业 - Map实现的规模要大一些,但更多标准(如果适用,您可以继承AbstractMap),而DataObject基本上是XPages-ism,但我是其中的忠实粉丝(供参考,文档数据源为{{1} } S)。但请注意:如果您实现其中之一,EL将绑定到DataObjectget方法,并忽略普通的setter和getter。如果你想使用那些,你必须编写反射代码来做到这一点(我建议使用Apache BeanUtils)。

我的博客上有一篇更详细的帖子:https://frostillic.us/f.nsf/posts/expanding-your-use-of-el-%28part-1%29