2010-05-06 9 views
3

Il semble que je ne suis pas clair sur ma question précédente à propos de bean géré. Donc, je le publie de nouveau de manière plus systématique.JSF question sur la communication entre le bean géré

J'ai une page: -

<?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> 

C'est c'est le haricot: -

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

} 

C'est data.xhtml qui utilise 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> 

C'est C'est un haricot: -

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

} 

Veuillez remplir le blanc où ??? est marqué dans speakHello(). Comment puis-je obtenir la valeur d'un autre haricot dans ce haricot? Je pense que cette fois je suis très clair. S'il vous plaît BalusC, Bozho et d'autres experts de Java, laissez-moi savoir si, encore je ne suis pas clair.

Merci à l'avance :) Cette fois, j'attends sûrement une réponse :)

Répondre

4

Comme vous pouvez apprendre dans un JSF2 tutorial on peut utiliser la fonction d'injection de dépendance. Dans votre cas, il s'agirait d'injecter MasterBean par exemple à pageBean. Je crois que vous pourriez avoir quelque chose comme ça dans votre pageBean:

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

    private String content; 

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

    ... 

un puis utilisez dans vos méthodes:

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

Je ne l'ai pas essayé moi-même. J'espère que ça va marcher.

BTW, il est fortement recommandé de ne pas commencer le nom de classe avec une petite lettre. Donc, la classe pageBean devrait être appelée PageBean à la place.

+0

Parfait! GrzegorzOledzki :). Votez et cochez la bonne réponse. D'abord, j'ai eu une exception mais heureusement, il a jeté une exception significative que getter et setters n'étaient pas là. Une fois que je les ai créés, ça marche bien et bien. Wow merci encore :) – TCM

Questions connexes