2009-08-31 51 views
3

我有一個ICEFaces的應用我們。一個頁面有兩個在頁面上顯示不同內容的bean。通報一個豆從另一個在ICEFaces的

我希望能夠當另一個豆子改變了對bean的東西,使得第一豆更新其網頁上的內容,以通知的bean。

這有可能在ICEFaces的?如果是的話如何?

感謝,

回答

5

你可以做的是「注入」到bean1 bean2,所以bean2將有機會獲得目前在bean1任何方法。

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

和bean2的Java代碼:如果你不使用Spring

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(); 
    } 

} 

如果你使用Spring,這可以很容易地定義Bean時完成

您可以像這樣直接訪問bean2代碼中的bean1實例:

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

+1這一點都很有幫助。對我來說。 – Nico 2009-09-08 09:47:13

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的推送,您可以使用的功能。查看他們的文檔以獲取更多信息。