Java 在XPages中动态设置和获取bean属性
还有一个Java问题(我是noob,我知道):在自定义控件中使用动态属性绑定,在JavaBean中使用动态属性getter,可能吗 我会解释的。我在自定义控件中广泛使用此功能:Java 在XPages中动态设置和获取bean属性,java,xpages,javabeans,el,Java,Xpages,Javabeans,El,还有一个Java问题(我是noob,我知道):在自定义控件中使用动态属性绑定,在JavaBean中使用动态属性getter,可能吗 我会解释的。我在自定义控件中广泛使用此功能: <xp:inputTextarea id="DF_TiersM"> <xp:this.value><![CDATA[#{compositeData.dataSource[compositeData.fieldName]}]]>&l
<xp:inputTextarea id="DF_TiersM">
<xp:this.value><![CDATA[#{compositeData.dataSource[compositeData.fieldName]}]]></xp:this.value>
这在控件中使用,其中数据源和字段名称都作为参数传递。到目前为止,这很有效。
现在,在某些情况下,数据源是一个托管bean。当解释上述行时,显然会生成代码来获取或设置。。。某物但究竟是什么呢
我得到这个错误:从com.sjef.AnyRecord类型的bean中获取属性'SomeField'时出错,我想这是正确的,因为我的bean中没有公共的getSomeField()。所有属性都在bean中动态定义
那么如何让XPages读取属性呢?是否有一个通用的getter(和setter)允许我使用属性名作为参数,而不是包含在固定的方法名中?如果XPages找不到getSomeField(),它会尝试其他方法吗,例如just get(String name)等等
一如既往:我真的很感谢你的帮助和回答 绑定的工作方式取决于Java对象是否实现了受支持的接口。如果没有(如果只是一些随机Java对象),那么任何属性都被视为“bean样式”名称,因此,如果您想调用“.getSomeField()”,那么绑定将类似于“#{obj.someField}”(或“#{obj['someField']}”,等等) 如果你想让它回归到一个普通的方法,那就是
DataObject
或Map
接口的工作-Map
实现起来更大,但更标准(如果适用,你可以继承AbstractMap
),而DataObject
基本上是一个XPages主义,但我非常喜欢它(作为参考,文档数据源是DataObject
s)。不过,请注意:如果实现了其中一个,EL将只绑定到get
或getValue
方法,并将忽略普通的setter和getter。如果要使用它们,则必须编写反射代码来执行此操作(我建议使用Apache BeanUtils)
我在我的博客上有一篇文章更详细地描述了这一点:嗨,谢谢!我真的不想让XPages调用“.getSomeField()”,而是需要“.get('SomeField')”或者是这样。我对多种类型的数据源使用动态自定义控件,其中一种恰巧是bean。bean应该能够支持在编译时名称未知的属性……是的,那么您需要的是
Map
或DataObject
。下面是一个从翻译包(但它可能在任何地方):太棒了!我从来没有找到DataObject类。谢谢你的例子!