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

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

还有一个Java问题(我是noob,我知道):在自定义控件中使用动态属性绑定,在JavaBean中使用动态属性getter,可能吗

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

            <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类。谢谢你的例子!