2009-07-07 11 views
4

私はFaceletコンポーネントを持っていて、私はそのためのバッキングBeanを持っています。私はいくつかのページへの私のコンポーネントが含まれている場合、私はページから私のコンポーネントにBeanを渡す:jsfページの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に値を渡す方法はいくつかあります。

難しいカスタムコンポーネントを作成しようとしていますが、これにはいくつかの検証やそれ以外のアクションが必要です。たぶん私は間違った方向にいるでしょうか?

答えて

2

コンポーネントの属性としてBeanを渡すことができます(ui:componentを使用している "コンポーネント"と言います)。非常にエレガントない

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が含まれるの仕組みとその慣れていないよ:

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

あなたはこれらのメソッドを持つバッキングBeanを持つことができます:コンポーネントの場合

これが私に起こった最初のことです。ビューが保存されると、属性が永続化される可能性があることに注意してください。属性マップに設定されたものは覚えていません。

+0

ありがとう、私のために働いていますが、私は私がしたいことをするために他の方法を見つける。 – aindl

2

通常次のようないくつかの入力コントロールに値を割り当てる:両方が取得とsomeFieldプロパティの値を設定する意味

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

#{pageBean.field}の値を決定する際の詳細を入力してください。

+0

質問に対する大きな単純なdirektの回答! – Olle89

0

私のfaceletsファイルからのコードです。もしすなわち、パラメータとして渡された豆の値を見ることができるように:

<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> 
関連する問題