2010-02-19 5 views
0

Dans mon application, le composant doit changer de façon dynamique. J'ai un Datatable en ce que j'ai deux colonnes, le premier est un <h:selectoneMenu> dans le menu je suis ayant deux données (les données sont 1 et 2) si 1 est choisi alors un <h:inputText> devrait apparaître et si 2 est choisi <h:selectoneMenu> devrait apparaître . Besoin d'aide pour le faire?Ajouter dynamiquement le composant dans JSF?

Mon JSF

<h:selectOneMenu id="menu" value="#{sample.data}" rendered="true" valueChangeListener="#{sample.change}"> 
    <f:selectItem itemLabel="Data" itemValue=""/> 
    <f:selectItems value="#{sample.list1}"/> 
      <a4j:support event="onchange" reRender="text" /> 
</h:selectOneMenu> 
<h:inputText id="text" value="#{sample.input}" rendered="#{sample.status}" /> 

Mon manged Bean classe

public class Sample { 
private Boolean status;   //Getter & Setter 
private List<SelectItem> list1; //Setter 
private String input;   //Getter & Setter 
private String data;    //Getter & Setter 

public void change(ValueChangeEvent event){ 
System.out.println((String)event.getNewValue()); 
if(((String)event.getNewValue()).equals("value1")){ 
    status=true; 
} 
else if(((String)event.getNewValue()).equals("value2")){ 
    status=false; 
} 
} 
public Boolean getStatus(){ 
if(status==null){ 
    status=true; 
} 
return status; 
} 
public List<SelectItem> getList1() { 
if(list1==null) { 
list1 = new ArrayList<SelectItem>(); 
list1.add(new SelectItem("value1", "label1")); 
list1.add(new SelectItem("value2", "label2")); 
} 
return list1; 
} 
} 
+1

4k vues, aucun vote? –

Répondre

5

Mon conseil serait: ne pas ajouter/supprimer de manière dynamique des composants. Résoudre votre problème d'une autre façon:

  • Bascule visibilité des composants
  • REBIND les données appartenant à un composant

Ajout/composant suppression est dynamiquement toujours une source de problèmes et les chances sont que vous pouvez le faire d'une autre manière beaucoup plus simple.

Dans votre cas, jouer avec la visibilité en utilisant l'attribut rendered devrait être suffisant.

+0

alors comment changer la visibilité en fonction des données fournies ... – Hariharbalaji

+0

pouvons-nous changer la visibilité dans le bean géré? – Hariharbalaji

+0

Comme ewernli a dit que vous devez rendre à nouveau le composant que vous voulez changer. Vous pouvez le faire en rechargeant la page entière ou en rechargeant le composant que vous voulez en utilisant AJAX. Nous devrions avoir plus d'informations sur la bibliothèque de composants que vous utilisez pour vous donner une réponse plus détaillée. – Averroes

2

Disons que vous avez quelque chose comme ça

<h:selectoneMenu id="selectOne" rendered="#{myBean.selectOneRendered}"> 
<h:inputText id="input" rendered="#{!myBean.selectOneRendered}"> 

Vous avez à la fois les composants de votre page jsp. Une fois que vous rechargez le jsp, le prorpertie rendu sera vérifié.

dans votre monBean vous devez avoir quelque chose comme ce

public boolean isSelectOneRendered(){ 
boolean rendered; 
//Do something here 
return rendered; 
} 

si le résultat est vrai, alors le selectOne sera rendu et l'entrée ne sera pas et l'inverse.

Questions connexes