2017-03-28 6 views
0

私は動的なパネル(さまざまな項目を持つパネル)を作成しようとしています。次に、ビュー・ページのパネル・コンポーネントとバインドする場合、パネル・オブジェクトを持つマネージドBeanのスコープは@ViewScopedです。 ajaxのいずれかがビューページのこのパネルをレンダリングして、マネージドBeanを再構築することに気付きました。なぜですか?ここで が私のコードです:ビュースコープ管理対象Bean内のオブジェクトとコンポーネントをバインドする方法はありますか。

これは管理Beanです:

package test; 

import org.icefaces.ace.component.panel.Panel; 

@ManagedBean(name = "myBean") 
@ViewScoped 

public class myBean { 

    private Panel myPanel; 

    // Constructor 
    public myBean() { 
     myPanel = drawPanel(); // this function initiate and add items to the panel 
    } 

    // Setters and Getters Methods 
} 

と、このビューのページ:

<h:form> 
    <ace:panel binding="#{myBean.myPanel}"></ace:panel> 
    <ace:pushButton actionListener="#{myBean.something}"> 
     <ace:ajax render="@form" /> 
    </ace:pushButton> 
</h:form> 

私はボタンを押すたびに、管理対象Beanのコンストラクタが呼び出され、なぜそれが起こったのですか? また、パネルコンポーネントからバインディング属性を削除するか、マネージドBeanセッションまたはアプリケーションスコープのスコープを作成すると、コンストラクタが呼び出されなかったことに気付きました。

注:iceface 3とjsf 2.0を使用しています。

この状況に対応するソリューションはありますか? ICEfacesをドキュメントとして

答えて

0

は言う:

プッシュボタンは、完全な形か、単に自身のエントリを可能にするコンポーネントです。通常のjsfコマンドボタンと同じ機能を持ちますが、余分な属性を追加する必要はありません。

プッシュボタンはコマンドボタンであるため、ナビゲーションが行われます。 action属性を使用しない場合は、デフォルト値が適用されます。私はそれが何かを見つけることができません(私はそれが空の文字列であると思われます)。

UICommandsの作用の結果に応じてJSFナビゲーションルール:nullまたは空隙

  • は:現在のビューを再ロード

  • 空文字列以下の場合(現在のビューを再作成表示された豆は同じです)

  • 空でないstrin g:ナビゲーションハンドラによって決定された次のビュー。

    <ace:pushButton action="#{myBean.nextPage}" actionListener="#{myBean.something}"> 
    

    をし、そのリンクハンドラメソッドに戻ってnull値を渡します:理由はaction属性の空の文字列のデフォルトの結果である場合は

、その後面でそれを使用

public class MyBean // You use myBean here in your question improperly 
{ 
    public String nexPage() 
    { return null; } 
} 
関連する問題