4

Faceletコンポーネントがあり、そのためのバッキングBeanがあります。コンポーネントをあるページに含めると、Beanをページからコンポーネントに渡します。

<ui:include src="./WEB-INF/templates/myTemplate.xhtml">
                    <ui:param name="pageBean" value="#{thisPageBean}" />
</ui:include>

私のコンポーネントにはバッキングBeanもあり、ページBeanの呼び出しから次の値に値を渡そうとしています。

<c:set target="#{componentBean}" property="field" value="#{pageBean.field}" />

しかし、この方法は機能しませんか?あるBeanから別のBeanに値を渡す方法はありますか?

渡されたものに対して検証やその他のアクションを実行する必要がある難しいカスタムコンポーネントを作成しようとしていますか?多分私は間違った方法ですか?

4

4 に答える 4

3

Beanをコンポーネントの属性として渡すことができます(「component」と言うときは、ui:componentを使用していると思います)。

コンポーネントの場合:

<ui:component binding="#{componentBean.myComponent}">
  <f:attribute name="foo" value="#{pageBean.field}" />
  <h:outputText value="#{componentBean.something}" />
</ui:component>

これらの方法でバッキングBeanを作成できます。

private Object field;
private UIComponent component;

public void setMyComponent(UIComponent c) { component = c; }
public UIComponent getMyComponent() { return component; }

private void lookupFields() {
  field = component.getAttributes().get("foo");
}

public String getSomething() {
  if (field == null) {
    lookupFields();
  }
  return "" + field;
}

あまりエレガントではありませんが、Faceletsに含まれるメカニズムについてはあまり詳しくありません。これが、私が最初に思いついたものです。ビューが保存されたときに属性が保持される可能性があることに注意してください-属性マップに設定されたものを思い出せません。

于 2009-07-07T22:39:13.833 に答える
2

通常、次のようないくつかの入力コントロールに値を割り当てます。

<h:inputText value='#{pageBean.field}'/>

これは、プロパティの値の取得と設定の両方を意味しsomeFieldます。あなたのケースの価値を決定するものについての詳細を提供して#{pageBean.field}ください。

于 2009-07-07T21:54:39.600 に答える
0

これが私のfaceletsファイルの1つからのコードです。ご覧のとおり、パラメータとして渡されたBeanの値は次のとおりです。

<ui:param name="bean" value="#{thisPageBean}" />

また、Beanのプロパティdtoには、[dto]表記を使用してアクセスできます。

<h:panelGroup>
    <h:selectOneMenu id="titleMenu" value="#{bean[dto].title}">
        <f:selectItems value="#{suburbsMBean.titles}" />
    </h:selectOneMenu>
    <h:message for="titleMenu" styleClass="error" />
</h:panelGroup>
于 2009-07-08T12:22:37.243 に答える
0

JSF 2.0ではparamsを使用してBeanメソッドを呼び出すことができるため、次のようなコメントにsetterメソッドを配置するだけで済みます。

<!-- #{componentBean.setField(pageBean.field)} -->

したがって、ページが読み込まれると、setterメソッドがトリガーされます。

于 2018-05-31T08:36:00.813 に答える