在EL bean的动态选择(Dynamic choice of bean in EL)

2019-06-27 11:25发布

有没有指定在运行时使用的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
标签: java jsf el