2012-03-15 20 views
3

バッキングBeanのプロパティへのバインドには、p:commandButtonというバインディングに問題があります。私は一般的なアイデアを示すために私のコードを単純化しようとしました。JSFコンポーネントをバッキングBeanのプロパティにバインドする方法

<h:form> 
    <h:outputText value="Title" /> 
    <p:inpurText value="#{exampleBean.title}" 

    <ui:include src="list.xhtml"> 
     <ui:param name="bean" value="#{exampleBean}"> 
    </ui:include> 
</h:form> 

list.xhtmlは、私が欲しいの断片である:

ExampleBeanは

public class Wrapper { 

    public String name; 
    public String description; 

    public CommandButton button; 

    // Listener which changes button state 

    // Getters and setters 
} 

いるindex.xhtmlがメインのページです

public class ExampleBean { 

    public String title;   
    List<ExampleWrapper> list; 

    // Getters and setters 

} 

ExampleWrapperはPOJOであるバッキングBeanでありますいくつかの場所で再利用する:

<ui:composition ...> 
    <ui:repeat id="list" var="exampleWrapper" value="#{bean.list}"> 
     <h:outputText value="#{exampleWrapper.name}"/> 
     <h:outputTextarea value="#{exampleWrapper.description}"/> 
     <p:commandButton id="button" binding="#{exampleWrapper.button}" 
      value="Button" /> 
</ui:composition> 

だから、私は例外を取得: javax.el.PropertyNotFoundException:/list.xhtml ...バインディング= "#{exampleWrapper.button}":目標到達不能、識別子が 'exampleWrapper' がなければ

をゼロにすることを決議しますbindingアトリビュートすべてが正常に動作して表示されます

なぜこのPOJOプロパティにボタンをバインドできますか?すべてのヘルプは、私はJSF UIコンポーネントのbinding(およびid)属性は、ビュービルド時に解決されるPrimefaces 3.0.1

答えて

6

とJSF 2.0.2を使用してい

を理解されるであろう。ビューの作成時に#{exampleWrapper}インスタンスがでない場合はです。ビューの作成時間は、XHTMLファイルがJSFコンポーネントツリーに解析された瞬間です。 #{exampleWrapper}は、ビューのレンダリング時にのみ使用できます。ビューのレンダリング時間は、JSFコンポーネントツリーがHTML出力を生成する瞬間です。

基本的には、唯一 <p:commandButton><ui:repeat>反復するなど、多くのように、そのHTML出力を複数回生成するコンポーネント・ツリーにあります。代わりに#{bean}にバインドするか、<ui:repeat>の代わりにJSTL <c:forEach>を使用する必要があります。つまり、ビューのビルド時にJSTLタグが実行されるため、<c:forEach>は物理的に複数のJSF UIコンポーネントを生成します。しかし、多くの場合、JSF 2.xではコンポーネントをバッキングBeanにバインドする必要はありません。これが解決策であると考えていた機能要件が何であれ、より良い方法で間違いなく解決することができます。

+0

他のリスナーからボタンの状態を変更するにはどうすればよいですか? – nikagra

+0

代わりにそのための属性を使用してください。例えば。 #{exampleWrapper.disabled} "、など。 – BalusC

+0

あなたの答えを見つけました。質問:http://stackoverflow.com/a/2456652/657792 – nikagra

関連する問題