EL中bean的动态选择

aze*_*rIO 3 java jsf el

有没有办法在运行时指定EL中使用的托管bean而不是设计时间?例如 actionListener="#{myBean.method}",myBean根据JSF页面调用代码,部分可以具有不同的值(条件是使用的任何对象而不是myBean是从实现"方法"的公共父派生的).

Bal*_*usC 5

如果您事先知道bean范围并且bean已经预先创建,那么是的,可以使用以下语法:

actionListener="#{requestScope[beanName].method}"
Run Code Online (Sandbox Code Playgroud)

where #{requestScope}表示请求范围映射(相同的映射可用于视图,会话和应用程序范围),并#{beanName}表示保存托管bean名称的变量.

如果您事先不知道bean范围和/或事先没有创建bean,那么您需要创建一个实用程序EL函数Application#evaluateExpressionGet(),它可以使用如下所示:

actionListener="#{util:getBean(beanName).method}"
Run Code Online (Sandbox Code Playgroud)