【问题标题】:Dynamically setting and getting bean properties in XPages在 XPage 中动态设置和获取 bean 属性
【发布时间】:2014-10-28 17:43:34
【问题描述】:

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

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

            <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(),它是否会尝试其他方法,例如只是 get(String name) 左右?

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

【问题讨论】:

    标签: java xpages javabeans el


    【解决方案1】:

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

    如果你想让它回退到一个通用的方法,这是DataObjectMap 接口的工作 - Map 的实现更大,但更标准(你可以从@987654326 继承@ 如果适用),而 DataObject 基本上是 XPages 主义,但我是它的忠实粉丝(供参考,文档数据源是 DataObjects)。但请注意:如果您实现其中之一,EL 将绑定到 getgetValue 方法,并将忽略普通的 setter 和 getter。如果您想在存在时使用它们,则必须编写反射代码来执行此操作(我建议使用 Apache BeanUtils)。

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

    【讨论】:

    • 您好,谢谢!我真的不希望 XPages 调用“.getSomeField()”,而是需要“.get('SomeField')”左右。我使用具有多种类型数据源的动态自定义控件,其中一个恰好是 bean。 bean 应该能够支持在编译时名称未知的属性...
    • 是的,那么 MapDataObject 就是您想要的。这是一个示例DataObject,它从翻译包中获取数据(但它可以在任何地方):frostillic.us/blog/posts/FE0AE00B7CEC4F8885257D46006CAB68
    • 太棒了!我永远不会找到 DataObject 类。谢谢你的例子!
    猜你喜欢
    • 2012-06-15
    • 1970-01-01
    • 1970-01-01
    • 2011-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多