有没有指定在运行时使用的EL托管bean,而不是设计时间的方法吗? 例如actionListener="#{myBean.method}"
,使得myBean
部分可以具有取决于JSF页面的代码从(调用条件是用来代替为myBean任何对象从实施“方法”的共同父衍生于不同的值)。
Answer 1:
如果你知道这个bean范围事先和bean已经预先创建,那么,有可能使用的语法如下:
actionListener="#{requestScope[beanName].method}"
其中#{requestScope}
表示请求范围映射(相同的地图可视图,会话和应用程序作用域)和#{beanName}
表示变量保持托管bean名称。
如果你不知道豆范围事先和/或在未预先创建的Bean,那么你需要创建一个实用EL函数做一个Application#evaluateExpressionGet()
因此它可以用来像如下:
actionListener="#{util:getBean(beanName).method}"
Answer 2:
如果你的问题是指产生一组页面为一些共同的元素,您还可以使用页面组合来实现这个子类。
例如,如果居民和非居民的管理豆人的子类:
例如。 在“非resident.xhtml”
<ui:define name="body">
<ui:param name="Controller" value="#{NonResident}"/>
<ui:include src="anyone.xhtml"/>
</ui:define>
在“resident.xhtml”
<ui:define name="body">
<ui:param name="Controller" value="#{Resident}"/>
<ui:include src="anyone.xhtml"/>
</ui:define>
然后“anyone.xhtml”可以定义使用用于bean名称“控制器”的共同元素。
这种方法还使您能够消除重复的页面定义。
文章来源: Dynamic choice of bean in EL