2010-05-06 78 views
3

似乎我不清楚我以前關於託管bean的問題。所以,我再次以更系統的方式發佈它。關於託管bean之間的通信的JSF問題

我有一個頁面: -

<?xml version='1.0' encoding='UTF-8' ?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" 
     xmlns:h="http://java.sun.com/jsf/html" 
     xmlns:ui="http://java.sun.com/jsf/facelets"> 
    <h:head> 
     <title>Facelet Title</title> 
    </h:head> 
    <h:body> 
     <ui:insert name="head"> 

     </ui:insert> 

     <br/><br/> 
     <h:inputText value="#{MasterBean.laala}"/> 
     <br/><br/> 

     <ui:insert name="content"> 

     </ui:insert> 
    </h:body> 
</html> 

這是它的豆: -

import javax.faces.bean.ManagedBean; 
import javax.faces.bean.RequestScoped; 


@ManagedBean(name="MasterBean") 
@ViewScoped 
public class MasterBean { 

    private String laala; 

    public String getLaala() { 
     return laala; 
    } 

    public void setLaala(String laala) { 
     this.laala = laala; 
    } 


    public MasterBean() { 
    } 

} 

這是data.xhtml它使用master.xhtml:

<?xml version='1.0' encoding='UTF-8' ?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" 
     xmlns:h="http://java.sun.com/jsf/html" 
     xmlns:ui="http://java.sun.com/jsf/facelets"> 
    <h:head> 
     <title>Facelet Title</title> 
    </h:head> 
    <h:body> 
     <ui:composition template="master.xhtml"> 
      <ui:define name="head"> 
       laala 
      </ui:define> 

      <h:outputText value="#{pageBean.content}"/> 

      <ui:define name="content"> 
       <h:commandButton actionListener="#{pageBean.speakHello}"/> 
      </ui:define>> 


     </ui:composition> 
    </h:body> 
</html> 

這是它的豆: -

import javax.faces.bean.ManagedBean; 
import javax.faces.bean.RequestScoped; 


@ManagedBean(name="pageBean") 
@ViewScoped 
public class pageBean { 

    private String content; 

    public String getContent() { 
     return content; 
    } 

    public void setContent(String content) { 
     this.content = content; 
    } 


    public void speakHello(){ 
     //how do i get value of laaala here which is in MasterBean??? 
     content = ??? + " Hello friend"; 
    } 

    public pageBean() { 
    } 

} 

請填寫空格在哪裏?在speakHello()中標記。我如何獲得這個bean中其他bean的價值?我想這次我很清楚。請BalusC,Bozho和其他java專家,如果我知道,我仍然不清楚。

感謝提前:) 這次我肯定期待一個答案:)

回答

4

正如你可以在JSF2 tutorial一個學習可以使用依賴注入功能。在你的情況下,這將是關於注入MasterBean實例pageBean。我相信你能有這樣的事情在你的pageBean

@ManagedBean(name="pageBean") 
@ViewScoped 
public class pageBean { 

    private String content; 

    @ManagedProperty(value="#{MasterBean}") 
    private MasterBean masterBean; 

    ... 

一個然後你的方法使用它:

public void speakHello(){ 
    //how do i get value of laaala here which is in MasterBean??? 
    content = masterBean.getLaala() + " Hello friend"; 
} 

我還沒有嘗試過我自己。我希望它能起作用。

順便說一句,強烈建議不要用小寫字母來啓動班級名稱。所以pageBean類應改爲PageBean

+0

太棒了! GrzegorzOledzki :)。投票並打勾標記以獲得正確答案。首先,我得到了異常,但幸運的是,它吸引了一個有意義的例外,那就是吸氣和吸氣設備不在那裏。一旦我創建它們,它工作順利和罰款。哇再次感謝:) – TCM 2010-05-06 08:30:37