9

在流定义中,我试图访问一个在其 ID 中有一个点的 bean

(例子:<evaluate expression="bus.MyServiceFacade.someAction()" />

但是,它不起作用。SWF 试图找到一个 bean“总线”。

最初,我通过使用辅助 bean 加载所需的 bean 来克服它,但解决方案不优雅且不舒服。使用别名也是不可能的,因为 bean 是大型系统的一部分,我无法篡改它们。

简而言之,没有一个解决方案允许我使用原始名称直接引用 bean。这在当前的 SWF 版本中是否可能?

4

4 回答 4

9

我可以通过使用 bean 访问器 ( @) 符号和 bean 名称周围的单引号来做到这一点。

使用您的示例:#{@'bus.MyServiceFacade'.someAction()}

于 2013-01-18T22:17:41.247 回答
1

这是 EL 解析器的限制(通常是 OGNL 或 Spring Web Flow 的 jboss-el)。EL 使用点符号来解析导航链,导致您描述的初始行为(试图找到“总线”b​​ean)。

于 2008-09-15T19:16:49.407 回答
0

尝试:

['bus.MyServiceFacade'].someAction()

或者

'bus.MyServiceFacade'.someAction()

这可能有效,也可能无效……但在 JSP 的表达式语言中使用了类似的东西。

于 2008-09-15T21:29:17.310 回答
-1

根据我的经验,任何带有 getter 方法的东西都可以通过点表示法访问。在您的示例中,bean 表示的任何对象都bus需要有一个getServiceFacade方法,并且返回的对象getServiceFacade需要有一个getSomeAction方法。

于 2008-09-15T19:22:21.140 回答