gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 09:00:50 26 4
gpt4 key购买 nike

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

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

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

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

我收到此错误:从类型为 com.sjef.AnyRecord 的 bean 获取属性“SomeField”时出错,我猜这是正确的,因为我的 bean 中没有公共(public) getSomeField()。所有属性都在 bean 中动态定义。

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

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

最佳答案

绑定(bind)的工作方式取决于您的 Java 对象是否实现了受支持的接口(interface)。如果不是(如果它只是一些随机的 Java 对象),那么任何属性都将被视为“bean 样式”名称,因此,如果您想调用“.getSomeField()”,那么绑定(bind)将类似于“#{obj.someField}”(或“#{obj['someField']}”等)。

如果您希望它回退到通用方法,那是 DataObjectMap 接口(interface)的工作 - Map 更大实现,但更标准(如果适用,您可以从 AbstractMap 继承),而 DataObject 基本上是一种 XPages-ism 但我是它的忠实粉丝(作为引用,文档数据源是 DataObject)。但是请注意:如果您实现其中之一,EL 将绑定(bind)到getgetValue 方法,并且会忽略普通的setter 和getter .如果您想在存在时使用它们,则必须编写反射代码来执行此操作(我建议使用 Apache BeanUtils)。

我的博客上有一篇文章对此进行了更详细的描述:https://frostillic.us/f.nsf/posts/expanding-your-use-of-el-%28part-1%29

关于java - 在 XPage 中动态设置和获取 bean 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26614988/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com