当前位置: 首页 > 知识库问答 >
问题:

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

钱焕
2023-03-14

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

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

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

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

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

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

一如既往:我真的很感谢你的帮助和回答!

共有1个答案

宦琪
2023-03-14

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

如果您想让它退回到一个通用方法,这是一个用于DataObjectMap接口的作业-Map实现起来更大,但更标准(如果适用,您可以继承AbstractMap),虽然DataObject基本上是XPages ism,但我非常喜欢它(作为参考,文档数据源是DataObjects)。但是要注意:如果实现其中一个,EL将只绑定到getgetValue方法,并将忽略正常的setter和getter。如果您想在出现时使用这些工具,那么必须编写反射代码(我建议使用ApacheBeanutils)。

我在博客上有一篇文章更详细地描述了这一点:https://frostillic.us/f.nsf/posts/expanding-your-use-of-el-(第一部分)

 类似资料:
  • 问题内容: 我有一个带有 伪 属性或 特殊 属性的对象,该属性可以用三种不同的方式命名(注意:我不控制生成该对象的代码) 属性中的值(取决于设置的是哪个)完全相同,我需要获取该值以进行进一步处理,因此根据数据源,我可以得到类似以下内容的值: 要么 要么 我对获取感兴趣,但不幸的是,该对象中不存在属性。因此,我为获得该价值而结束的工作只是打了一堆电话。假设可能性只有三种,则代码如下所示: 现在,我想

  • 我正在尝试为属性创建get和set方法: 设置值的关键字是什么?

  • 问题内容: 我正在尝试向angular js的控制器中的div动态添加属性。 一切看起来都很好,在调试器中,我看到该属性已添加,但它不执行我的功能。您是否有任何想法如何向现有div添加属性以及如何使其起作用? 问题答案: 您需要重新编译div http://jsfiddle.net/r2vb1ahy/

  • 问题内容: 在上述情况下,bean中的属性随环境而变化。在开发时,config的引用更改为。并在阶段中将参考更改为。问题在检入spring文件时出现。每次签入之前,我们都必须分析config的引用。如果config的引用具有签入的值,我们可能必须解释很多问题。 有什么解决方案可以使其自动化? 注意:春季版本为2.0.1 问题答案: 使用Spring的PropertyPlaceholderConfi

  • 问题内容: 这是我的工厂: 我在两个控制器MainCtrl和AccountEditCtrl中使用此服务,在MainCtrl中使用getFirstname(),在AccountEditCtrl中使用setFirstname 我的问题是,当我使用userService.setFirstname()时,$ scope.userName不会在MainCtrl中更改。 问题答案: 在某些情况下,$ watc

  • 我能想到的唯一方法是,在不进行上述尝试的情况下,从一个字符串中设置每个属性,遍历每个属性,并使用if-else或switch-case逻辑来确定调用哪一个dataSource设置器来设置值。 那么,有没有一种方法可以在不调用每个单独的setter的情况下从字符串中动态设置这些属性呢? 当我在或中设置用户名时,它确实发生了变化,但我认为这可能是针对用户名和密码的,因为我试图设置的其他属性没有效果。