Datatable + in cell editing não funciona;

4 respostas
andersonlandim

Olá a todos;

Estou tentando replicar o exemplo abaixo do primefaces:

http://www.primefaces.org/showcase/ui/datatableEditing.jsf

É um DataTable com In Cell Editing; mas para a minha surpresa, o valor editado não muda! Ou seja, eu clico em editar, modifico o valor do primeiro campo e clico em ok. O valor continua o antigo! Já tentei de tudo!

Estou usando o primefaces 2.2.1, acho que é a última versão, porém não consigo fazer funcionar;

Tentei colocar um listener para um método tipo este:

public void rowEdit(RowEditEvent ev) {

        TypeSpectacles obj = null;
        try {
            obj = (TypeSpectacles) ev.getObject();
            ejb.edit(obj);
        } catch (Exception ex) {
            addMessage(ex);
        }

    }

Em um println observer que o valor continuou sendo o original, ou seja, não recebeu o valor que eu queria, o novo!

Só consegui algo ± colocando um bind para um objeto no managedbean, mas dessa forma eu não poderia colocar o value no objeto.

Pra mim o bind é até melhor, mas eu precisaria, no ato da edição, apresentar o valor atual para que o usuário possa editar, coisa que sem o value eu não consigo;

Alguma ideia?

vlw

4 Respostas

Polverini

posta os códigos da página, aparece algum erro ??

andersonlandim

Não aparece erro nenhum! Estou usando o rowEditListener="#{sistemaMB.update}"

public void update(RowEditEvent ev) {  
  
       Sistema obj = null;  
       obj = (Sistema) ev.getObject();  
       // Aqui a saída é sempre a original, a que vem do banco. Nunca eu consigo pegar o novo valor que eu incluo no datatable com roweditor
       System.out.println("Nome " + obj.getNome()); 
  
}
<h:form id="listaSistemaForm">
                <p:dataTable id="listaDeSistemas" var="sistema"                             
                             value="#{sistemaMB.listaSistema}"
                             rowEditListener="#{sistemaMB.update}"                             
                             rows="10">


                    <p:column>
                        <f:facet name="header">
                                Sistema
                        </f:facet>
                        <p:cellEditor>
                            <f:facet name="output">
                                <h:outputText value="#{sistema.nome}" />
                            </f:facet>
                            <f:facet name="input">
                                <p:inputText value="#{sistema.nome}"/>
                            </f:facet>
                        </p:cellEditor>
                    </p:column>         

                   

                    <p:column headerText="Options">
                        <p:rowEditor />
                    </p:column>

                </p:dataTable>
            </h:form>

Outra coisa, eu preferia que na linha <p:inputText value="#{sistema.nome}"/> foi um binding… Pra mim seria melhor de trabalhar. E funciona! Da forma que eu quero, porém, sem o value, então quando eu clico em editar o input vem vazio. eu Gostaria que viesse o valor atual pra eu modificar.

Tá difícil .srrssr

vlw

G

Tambem estou com problemas para usar este componente.

Altero os dados mas ele nao salva.

;-(

D

Olá pessoal, também passei por esse problema mas consegui resolver

Para isso, no método que traz a lista do banco temos que fazer uma verificação…

public List<ObjetoQualquer> getListagem() {
        if (listagem.isEmpty()) { //listagem é uma lista declarada de ObjetoQualquer
            listagem = (List<ObjetoQualquer>) dao.listagemoDoBanco();
        }
        return this.listagem;     
    }

Desta forma a lista não é recarregada quando usamos o RowEditListener… e temos a referencia do objeto editado.

Abraço

Criado 25 de fevereiro de 2011
Ultima resposta 2 de set. de 2011
Respostas 4
Participantes 4