3

Bean名はわかっているが、まだ構築されていない場合、管理対象Beanのプロパティを呼び出す/アクセスするにはどうすればよいですか?

例えば:

<p:selectOneMenu value="#{eval.evaluateAsBean(bean).text}" >
    <f:selectItems value="#{eval.evaluateAsBean(bean).values}" var="val"
        itemLabel="#{val}" itemValue="#{val}" />
</p:selectOneMenu> 

testBeanと呼ばれるマネージドBeanがあり、私のビューでBean"testBean"値がある場合、testBeanのtextまたはvaluesプロパティを呼び出す必要があります。

編集1

コンテキスト

オブジェクトは、プロパティ(値)のリストで構成されます。1つのプロパティは、そのタイプに応じて、カスタムJSFエディターで変更されます。

エディターのリストは、オブジェクトのタイプから決定され、custom:includeタグを使用してフォームに表示されます。このカスタムタグは、エディターを動的に含めるために使用されます<custom:include src="#{editor.component}">コンポーネントプロパティは、JSFエディターの場所を指します。

私の例では、一部のエディター(選択ボックスとしてレンダリング)は同じfacelet(dynamicDropdown.xhtml)を使用します。すべてのエディターには、セッションスコープのマネージドBeanがあります。同じファセットを複数のBeanで再利用し、Beanパラメーターを使用してBeanの名前をdynamicDropdown.xhtmlに渡したい。

genericAccount.xhtml

<p:dataTable value="#{group.editors}" var="editor">
    <p:column headerText="Key">
        <h:outputText value="#{editor.name}" />
    </p:column>
    <p:column headerText="Value">
        <h:panelGroup rendered="#{not editor.href}">
            <h:outputText value="#{editor.component}" escape="false" />
        </h:panelGroup>
        <h:panelGroup rendered="#{editor.href}">
            <custom:include src="#{editor.component}">
                <ui:param name="bean" value="#{editor.bean}"/>  
            <custom:include>
       </h:panelGroup>
    </p:column>
</p:dataTable>

#{editor.component}dynamicDropdown.xhtmlファイルを参照します。

dynamicDropdown.xhtml

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:p="http://primefaces.prime.com.tr/ui">
    <p:selectOneMenu value="#{eval.evaluateAsBean(bean).text}" >
    <f:selectItems value="#{eval.evaluateAsBean(bean).values}" var="val"
        itemLabel="#{val}" itemValue="#{val}" />
    </p:selectOneMenu>  
</ui:composition>   

evalマネージドBeanです:

@ManagedBean(name = "eval")
@ApplicationScoped
public class ELEvaluator {
    ...

    public Object evaluateAsBean(String el) {
        FacesContext context = FacesContext.getCurrentInstance();
        Object bean = context.getELContext()
            .getELResolver().getValue(context.getELContext(), null, el);
        return bean;
    }

    ...

}
4

3 に答える 3

1

私はservlet-api2.5を使用しています

サーブレット2.5はEL2.1を意味します。EL 2.1では、引数を使用したメソッドの呼び出しはサポートされていません。これは、サーブレット3.0を意味するEL2.2で導入されました。

サーブレット3.0互換のコンテナ(Tomcat 7、Glassfish 3、JBoss AS 6など)にアップグレードできない場合は、代わりにEL2.1実装をアップグレードする必要があります。JBoss ELは、EL2.2と同じ新機能をサポートするEL2.1互換の実装です。これをインストールするには、 Webアプリケーションにjboss-el.jarをドロップし、Mojarraを使用していると仮定して/WEB-INF/lib、次のコンテキストパラメーターをに追加します。web.xml

<context-param>     
    <param-name>com.sun.faces.expressionFactory</param-name>
    <param-value>org.jboss.el.ExpressionFactoryImpl</param-value>   
</context-param>
于 2012-06-05T12:49:06.177 に答える
1

私が理解している限り、あなたの質問<h:outputText value="#{bean.text}"/>はプロパティのテキストを画面に出力します。もちろん、マネージド Bean には @ManagedBean で注釈を付ける必要があります。

于 2012-05-17T14:41:28.667 に答える
1

ビューに bean="#{testBean}" を渡すなど、JSF 経由で Bean を渡した場合は、value="#{cc.attrs.bean.test}" でプロパティにアクセスします。

于 2012-05-17T14:04:33.193 に答える