Duvida JSF

1 resposta
andretads

pessoal estou cm a seguint duvida …

tenho uma pagina jsf cm um h:selectOneMenu e ao lado um h:command… qnd carrego a pagina, ela vem cm apenas um select e qnd clico no link eu adiciono selects fiz esse teste soh Q nao tah dando certo…

c alguem puder me ajudar fico grato

FormBean

import javax.faces.component.UIPanel;

import javax.faces.component.UISelectItem;

import javax.faces.component.UISelectOne;

public class XFB {
private UIPanel panel;

private UISelectOne menu;

private Long id;

public XFB() {
	System.out.println("-----XFB-----");
	id = (long) 1;
}

public String addSelect() {
	UISelectItem item1 = new UISelectItem();
	item1.setId(getNewId());
	item1.setItemLabel("AAA");
	item1.setItemValue("AAA");
	UISelectItem item2 = new UISelectItem();
	item2.setId(getNewId());
	item2.setItemLabel("BBB");
	item2.setItemValue("BBB");

	UISelectOne one = new UISelectOne();
	one.setId(getNewId());
	one.getChildren().add(item1);
	one.getChildren().add(item2);
	panel.getChildren().add(one);
	return null;
}

private String getNewId() {
	return "componente" + System.currentTimeMillis() + "-" + (id++);
}

public String next() {
	return "ok";
}

public Long getId() {
	return id;
}

public void setId(Long id) {
	this.id = id;
}

}

JSF

<%@ taglib uri=<a href="http://java.sun.com/jsf/core">http://java.sun.com/jsf/core</a>” prefix=“f” %>

<%@ taglib uri=<a href="http://java.sun.com/jsf/html">http://java.sun.com/jsf/html</a>” prefix=“h” %>

<f:view>











<h:messages />

<h:form id=“form”>

<h:panelGrid columns=“1” width=“80%” binding="#{XFB.panel}">

<h:commandLink value=“Adicionar novo” action="#{XFB.addSelect}" />

<h:selectOneMenu binding="#{XFB.menu}">

<f:selectItem itemLabel=“XXX” itemValue=“XXX” />

<f:selectItem itemLabel=“YYY” itemValue=“YYY” />

</h:selectOneMenu>

</h:panelGrid>

</h:form>





</f:view>

1 Resposta

kicolobo

Olá,

tenho algumas sugestões:

armazene no seu backing bean uma matriz ou coleção que armazene objetos do tipo SelectItem.

Então, ao invés de

public String addSelect() {
UISelectItem item1 = new UISelectItem();
item1.setId(getNewId());
item1.setItemLabel("AAA");
item1.setItemValue("AAA");
UISelectItem item2 = new UISelectItem();
item2.setId(getNewId());
item2.setItemLabel("BBB");
item2.setItemValue("BBB");

UISelectOne one = new UISelectOne();
one.setId(getNewId());
one.getChildren().add(item1);
one.getChildren().add(item2);
panel.getChildren().add(one);
return null;
}

Você poderia fazer algo mais interessante como

private List<SelectItem> valores;

   public List<SelectItem> getValores()
   {
        if (this.valores == null)
           {
               valores = new Vector<SelectItem>();
               // preencha o List com objetos do tipo SelectItem.
               // o contrutor é SelectItem(Object objetoRepresentado, String descricao)
            }
        return this.valores;
    }

E, no arquivo JSP, você faria algo como

(...)
           <h:selectOneMenu value="#{bean.objetoRepresentadoNoBeanQueConsisteNoObjetoRepresentadoPeloObjetoDaLista}">
                <f:selectItems value="#{bean.valores}"/>
           </h:selectOneMenu>
      (...)

Isto deverá resolver o seu problema.

Lembre-se: o objeto representado no SelectItem deverá ter um equivalente em algum lugar no seu bean.

Criado 13 de fevereiro de 2008
Ultima resposta 13 de fev. de 2008
Respostas 1
Participantes 2