3

設計時にではなく、実行時にELで使用されるマネージドBeanを指定する方法はありますか?たとえば 、コードが呼び出されるJSFページに応じactionListener="#{myBean.method}"myBeanパーツの値が異なる場合があります(myBeanの代わりに使用されるオブジェクトが「メソッド」を実装する共通の親から派生していることを条件とします)。

4

2 に答える 2

5

Beanスコープを事前に知っていて、Beanが事前に作成されている場合は、次の構文を使用できます。

actionListener="#{requestScope[beanName].method}"

ここで#{requestScope}、はリクエストスコープマップを表し(ビュー、セッション、およびアプリケーションスコープで同じマップを使用できます)#{beanName}、マネージドBean名を保持する変数を表します。

Beanスコープが事前にわからない場合、および/またはBeanが事前に作成されていない場合は、Application#evaluateExpressionGet()次のように使用できるように、を実行するユーティリティEL関数を作成する必要があります。

actionListener="#{util:getBean(beanName).method}"
于 2012-08-28T13:07:23.007 に答える
0

質問が、共通の要素を持つ多数のサブクラスのページのセットを生成することに言及している場合は、ページ構成を使用してこれを実現することもできます。

たとえば、ResidentとNonResidentがPersonのサブクラスのマネージドBeanである場合:

例えば。'non-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名に「Controller」を使用して共通要素を定義できます。

このアプローチにより、重複するページ定義を排除することもできます。

于 2013-10-20T13:54:59.697 に答える