有没有办法在运行时而不是设计时指定在 EL 中使用的托管 bean?例如。
actionListener="#{myBean.method}"
这样 myBean
部分可以有不同的值,具体取决于调用代码的 JSF 页面(条件是使用任何对象代替myBean 派生自实现“方法”的共同父级)。
最佳答案
如果您事先知道 bean 范围并且 bean 已经事先创建,那么是的,可以使用以下语法:
actionListener="#{requestScope[beanName].method}"
其中 #{requestScope}
表示请求范围映射(相同的映射可用于 View 、 session 和应用程序范围),#{beanName}
表示保存请求的变量托管 bean 名称。
如果您事先不知道 bean 作用域和/或没有事先创建 bean,那么您需要创建一个实用 EL 函数来执行 Application#evaluateExpressionGet()
, 这样它就可以像下面这样使用:
actionListener="#{util:getBean(beanName).method}"
关于java - EL中bean的动态选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12159777/