Criar componente dinamicos JSF/Primefaces

1 resposta
montovani

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.

1 Resposta

montovani

Alguemmmm???

Criado 30 de janeiro de 2012
Ultima resposta 30 de jan. de 2012
Respostas 1
Participantes 1