2009-08-31 1 views
3

私はICEFacesアプリケーションを使用しています。 1つのページには、ページ上に異なるものを表示する2つのBeanがあります。ICEFaces内の別のBeanに通知する

別のBeanがBean上で何かを変更したときに、あるBeanに通知して、最初のBeanがページ上のコンテンツを更新できるようにしたいと考えています。

これはICEFACEで可能ですか?もしそうなら、どのように?あなたは何ができるか

おかげで、

タム

答えて

5

はbean2にbean1を「注入」するので、bean2はbean1中に存在する任意のメソッドにアクセスする必要があります。

public class Bean2 { 

    private Bean1 bean1 = null; 

    // The setter will be used by Spring to inject Bean1 in Bean2... 
    public void setBean1(Bean1 bean1) { 
     this.bean1 = bean1; 
    } 

    ... 

    public void someMethod() { 
     ... 
     // Now, you can call the bean1 instance to update what you want... 
     bean1.updateSomething(); 
    } 

} 

あなたが春を使用していない場合:

<bean id="bean1" class="foo.bar.Bean1"/> 
<bean id="bean2" class="foo.bar.Bean2"> 
    <property id="bean1" ref="bean1"/> 
</bean> 

とbean2のJavaコードで:豆を定義するときに、あなたが春を使用している場合

が、これは簡単に行うことができます

bean2インスタンス内のbean1インスタンスに直接アクセスすることができます。

Bean1 bean1 = (Bean1) FacesContext.getCurrentInstance().getCurrentInstance() 
    .getExternalContext().getSessionMap().get("bean1"); 
+0

+1これは本当にうまく機能しました。 – Nico

0

私は自分自身の仕事のいくつかの例を掲載するつもりでしたが、ICEFaces blogの人はすでに自分のブログの投稿を本当によく持っています。見てみましょう。

3

既に述べたように、JSFは簡単な注入も行うことができます。あなたのfaces-config.xmlファイル内でこのような何か:豆の値が変更されたときに、ユーザーインターフェイスを更新するよう

<managed-bean> 
    <managed-bean-name>bean1</managed-bean-name> 
    <managed-bean-class>org.icefaces.sample.Bean</managed-bean-class> 
    <managed-bean-scope>request</managed-bean-scope> 
</managed-bean> 

<managed-bean> 
    <managed-bean-name>bean2</managed-bean-name> 
    <managed-bean-class>org.icefaces.sample.Bean</managed-bean-class> 
    <managed-bean-scope>request</managed-bean-scope> 
    <managed-property> 
     <property-name>bean1</property-name> 
     <value>#{bean1}</value> 
    </managed-property> 
</managed-bean> 

、ページとの定期的なクライアントの相互作用を介してトリガすることができます。ただし、コラボレーション型アプリケーション(あるユーザーの変更で他のユーザーに表示される値を更新できる)を使用している場合、ICEfacesにはAjax Pushと呼ばれる機能があります。詳細については、ドキュメントをチェックしてください。

関連する問題