我的 Xpages 应用程序有一个用于应用程序范围设置的 cacheBean。我有一个用于 PC 文档的托管 Bean,其字段状态为整数类型。
在cacheBean中,我有一个方法getPCStatus(Integer status),当给定数字时,该方法将返回状态的字符串文本。
在我的 Xpage 上,我有一个文本字段,我想将其绑定(bind)到
的结果cacheBean.getPCStatus(PCBean.status)
因此,对于 1,它将返回“Inventory”,对于 2,则返回其他内容,等等。
但是,代码抛出错误。
这是代码:
readonly="true">
<xp:this.value><![CDATA[#{CacheBean.getPCStatus(PCModelBean.status)}]]></xp:this.value>
</xp:inputText>
错误是
EL 语法错误,属性“值”:CacheBean.getPCStatus(PCModelBean.status)
我知道我很久以前读过一些有关此问题的内容,但不记得如何处理这个问题,但找不到它。
我想知道 getPCStatus 方法应该在 PCBean 中还是在 cacheBean 中?
最佳答案
n XPage 使用的 EL 版本不支持调用带参数的方法。如果 getPCStatus()
是零参数方法,那么您可能可以使用 #{CacheBean.pCStatus}
调用它,但事实上它是妨碍您的参数.
有一些常见的解决方法:如果 CacheBean 本身实现了 Map
或 DataObject
,那么 EL 将调用 get
或 getValue
方法,分别与您在“.”之后放置的任何内容一起使用。 - 你可以用它来排序假方法调用。
或者,您可以保留 CacheBean
一个 POJO(不实现这些接口(interface)之一),但让 getPCStatus
本身的返回值是一个 Map
或 DataObject
,它将采用您传入的任何值(在本例中为 PCModelBean.status
)并使用类似 #{CacheBean 的绑定(bind)进行查找.pCStatus[PCModelBean.status]}
。 DataObject
写起来还不错:https://frostillic.us/blog/posts/FE0AE00B7CEC4F8885257D46006CAB68
或者,作为所有这些的完整替代方案,如果您不需要绑定(bind)为读+写,则可以使用 SSJS 来调用该方法。
关于java - Xpages:在 EL 中的 CacheBean 中调用 java 方法时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35781760/