2010-05-06 76 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