访问 ID 中带有点 (.) 的 bean
Posted
技术标签:
【中文标题】访问 ID 中带有点 (.) 的 bean【英文标题】:Accessing a bean with a dot(.) in its ID 【发布时间】:2010-09-08 22:17:24 【问题描述】:在流定义中,我试图访问一个在其 ID 中有一个点的 bean
(例如:<evaluate expression="bus.MyServiceFacade.someAction()" />
但是,它不起作用。 SWF 试图找到一个 bean“总线”。
最初,我通过使用辅助 bean 加载所需的 bean 来克服它,但解决方案不优雅且不舒服。使用别名也是不可能的,因为 bean 是大型系统的一部分,我无法篡改它们。
简而言之,没有一个解决方案允许我使用原始名称直接引用 bean。这在当前的 SWF 版本中是否可行?
【问题讨论】:
【参考方案1】:我可以通过使用 bean 访问器 (@
) 符号和 bean 名称周围的单引号来做到这一点。
使用您的示例:#@'bus.MyServiceFacade'.someAction()
【讨论】:
【参考方案2】:这是 EL 解析器的限制(通常是 OGNL 或 Spring Web Flow 的 jboss-el)。 EL 使用点符号来解析导航链,导致您描述的初始行为(试图找到“总线”bean)。
【讨论】:
【参考方案3】:试试:
['bus.MyServiceFacade'].someAction()
或
'bus.MyServiceFacade'.someAction()
这可能有效,也可能无效...但类似的东西用于 JSP 的表达式语言中。
【讨论】:
【参考方案4】:根据我的经验,任何带有 getter 方法的东西都可以通过点符号来访问。在您的示例中,bus
bean 表示的任何对象都需要具有 getServiceFacade
方法,并且 getServiceFacade
返回的对象需要具有 getSomeAction
方法。
【讨论】:
以上是关于访问 ID 中带有点 (.) 的 bean的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Presto JSON 函数访问字段名称中带有“~”的 json 字段