Ola bom dia a todos!
Pessoal estou precisando que a cada clique que o usuario der em um botao em uma tela, este va adicionando um Label e um Text. Bem vi alguns exemplos na net e fazendo aqui verifiquei que a primeira vez que clico no botao ele adiciona os componentes no PanelGrid traquilo(Os dois no caso, Label e Text), mas quando clico no botao a segundo vez e verifico os componente existente no Panel, ele duplica os que ja existia, exemplo: criei um Label chamado lblCategoria e um Text chamado txtCategoria, na segunda vez terei dois lblCategoria e dois txtCategoria. A pergunta e porque esta acontecendo isto?
Segue abaixo o codigo.
Pagina:
<h:form id="frmEvento">
<p:panel id="pnlUpdate">
<div style="height: 300px">
<div style="background-color: silver; height: 30px">
<table width="100%">
<tr>
<td style="width: 100px">
</td>
<td align="center" valign="middle">
<h:outputLabel id="lblDescricao" value="Escolha #{eventoBean.descricao}" style="font-size: large; color: black">
</h:outputLabel>
</td>
<td align="right" valign="middle" style="width: 100px">
</td>
</tr>
</table>
</div>
<p:separator style="height: 10px">
</p:separator>
<p:messages></p:messages>
<h:panelGrid columns="1" captionClass="rows" rowClasses="5" cellpadding="5" border="1">
<h:panelGrid id="grid" binding="#{eventoBean.containerComponent}" columns="2" border="1">
</h:panelGrid>
</h:panelGrid>
</div>
<div align="center">
<p:commandButton value="Cancelar" action="/faces/ger/evento/evento.xhtml" ajax="false">
</p:commandButton>
<p:commandButton value="#{eventoBean.botao}" action="#{eventoBean.addComponent}" update="grid" ajax="false" immediate="true" >
</p:commandButton>
</div>
</p:panel>
</h:form>
Bean:
public void addComponent(){
int tam =getContainerComponent().getChildren().size();
if(tam>0){
for(int j=0;j<tam;j++){
UIComponent ui = this.getContainerComponent().getChildren().get(j);
System.out.println(ui.getRendererType());
System.out.println(ui.getClientId());
System.out.println(ui.getId());
System.out.println(ui.getChildren().size());
}
}
System.out.println("Valor antes:"+this.getContainerComponent().getChildren().size());
valor = new ArrayList<String>();
valor.add("Categoria");
valor.add("Participante");
valor.add("Local");
valor.add("Data");
System.out.println("Valor de I: "+i);
HtmlOutputLabel label = new HtmlOutputLabel();
label.setRendererType("javax.faces.Label");
label.setId("lbl_"+i);
label.setValue(valor.get(i));
label.setFor("frmEvento");
getContainerComponent().getChildren().add(label);
HtmlInputText text = new HtmlInputText();
text.setRendererType("javax.faces.Text");
System.out.println(valor.get(i));
text.setId("txt"+valor.get(i));
text.setValue(valor.get(i));
text.setDisabled(true);
text.setSize(22);
getContainerComponent().getChildren().add(text);
System.out.println("Valor depois: "+this.getContainerComponent().getChildren().size());
i++;
}
Ah desculpe os erros de portugues, e que estou usando uma conexao remota aqui na empresa e o teclado so aceita formato USA e nao acho os acentos e cedilha.
Agradeco desde ja a todos pela forca.