Editar campo usando InCell Editing PrimeFaces

3 respostas
B

Aew galera, to precisando da ajuda. Pesquisa em um monte de sites e inclusive aqui no GUJ, porem nenhum exemplo me ajudou até agora!

Galera como faço pra usar o componente p:cellEditor e depois de editado gravar no Banco de Dados? Pq o exemplo no primefaces é gravado num ArrayList.

MODELO:

public void atualizar(Grupo grupo)throws SQLException {
    String sql = "UPDATE site_sae.grupo SET " +
                        "nome         = ?, " +
                        "descricao    = ?, " +
                        "matinclusao  = ?, " +
                        "dtinclusao   = ? " +
                        "WHERE codigo = ?;";
    Connection objCon = ConexaoDAO.getConnection();
    PreparedStatement pstm = null;
    ArrayList lista = new ArrayList();
    SimpleDateFormat dtFormat = new SimpleDateFormat("yyyy-MM-dd");
    try{
        pstm = objCon.prepareStatement(sql);
        pstm.setString(1,grupo.getNome());
        pstm.setString(2,grupo.getDescricao());
        pstm.setString(3,grupo.getMatinclusao());
        pstm.setString(4,dtFormat.format(grupo.getDtinclusao()));
        pstm.setInt(5,grupo.getCodigo());
        pstm.execute();
    }catch(Exception e){
        e.printStackTrace();
    }finally{
          ConexaoDAO.closeConnection(objCon, null, pstm, null);
      }

CONTROLE:

public String atualizar() throws GrupoDAOExeception {

GrupoDAO idao = new GrupoDAO();

try {

idao.atualizar(grupo);

grupo = new Grupo();

} catch (Exception e) {

e.printStackTrace();

}

return “”;

}

Página JSF:

<?xml version="1.0" encoding="UTF-8"?>

<ui:composition template="…/layouts/layoutPrincipal.xhtml"
xmlns=“http://www.w3.org/1999/xhtml
xmlns:ui=“http://java.sun.com/jsf/facelets
xmlns:f=“http://java.sun.com/jsf/core
xmlns:h=“http://java.sun.com/jsf/html
xmlns:p=“http://primefaces.prime.com.tr/ui”>

<ui:define name="cabecalho">
    <link href="#{appResources.css}/cabecalho.css" rel="stylesheet" type="text.css"/>
    <ui:include src="/cabecalhoex.xhtml"/>
</ui:define>


<ui:define name="conteudo">
    <h:head></h:head>
    <h:form style="padding-top: 20px ; padding-left: 5px">
        <p:fieldset legend="Lista dos Grupos">
            <p:dataTable value="#{GrupoMB.listaGrupo}" var="grupo" rows="10" paginator="true" emptyMessage="Nenhum registro encontrado.">
              
                
                <p:column  style="width:150px">
                    <p:cellEditor>
                        <f:facet name="output">
                            <h:outputText value="#{grupo.nome}" />
                        </f:facet>
                        <f:facet name="input">
                            <p:inputText value="#{grupo.nome}" style="width:100%"/>
                        </f:facet>
                    </p:cellEditor>
                </p:column>
                <p:column headerText="Descrição">
                    <h:outputText value="#{grupo.descricao}"/>
                </p:column>
                <p:column headerText="Matricula">
                    <h:outputText value="#{grupo.matinclusao}"/>
                </p:column>
                <p:column headerText="Data">
                    <h:outputText value="#{grupo.dtinclusao}"/>
                </p:column>

                <p:column>

                    <f:facet name="header">
                        <h:outputText value="excluir"/>
                    </f:facet>
                    <p:commandButton action="#{GrupoMB.excluir}"  onclick="cd.show()" update="grupo,cd,aviso" image="ui-icon ui-icon-close" title="Delete">
                        <f:setPropertyActionListener target="#{GrupoMB.grupo}" value="#{grupo}"/>
                    </p:commandButton>
                </p:column>

                 <p:column headerText="Options">
        <p:rowEditor  />
    </p:column>  
            </p:dataTable>
        </p:fieldset>
    </h:form>
    <h:form>
        <p:confirmDialog message="Tem certeza que deseja excluir o registro #{GrupoMB.grupo.nome} ?"
                         header = "Excluir registro" severity="alert" widgetVar="cd" showEffect="bounce" hideEffect="explode" modal="true">

            <p:commandButton value ="Sim" actionListener="#{GrupoMB.excluir}" onclick="cd.hide()"
                             update="aviso, grupo">
            </p:commandButton>

            <p:commandButton value ="Não" onclick="cd.hide();" update="cd,grupo,aviso"/>

        </p:confirmDialog>
    </h:form>
</ui:define>


<ui:define name="rodape">
    <ui:include src="/rodape.xhtml"/>
</ui:define>

</ui:composition>

3 Respostas

S

Tenta utilizar o compone <p:ajaxStatus/>

<p:column headerText=“Options”>

<p:rowEditor >

<p:ajaxStatus oncomplete="#{NomeDoBean.NomeDaFunção()}"></p:ajaxStatus>

</p:rowEditor>

</p:column>

Espero ter ajudado ;D

X

Vcs conseguiram fazer isso…pois to tentando utilizar esse comando mas nao funfa do jeito q sugeriram…preciso mto de uma resposta!!! :cry:

E

Fala aew …
Não sei se ainda precisa da resposta …
mas fica para quem visualizar mais tarde pq foi difícil para mim que sou iniciante em primefaces e java de modo geral acertar esse problema…

no meu caso utilizo PrimeFaces 3.0.1

então deve-se seguir mais ou menos essa estrutura:

<p:dataTable id="tabela" value="#{Mbeans.user}" var="todosUsers" emptyMessage="Nenhum registro incluido." paginator="true" rows="10" >
                    <p:ajax event="rowEdit" update="@this" listener="#{MBean.onEditRow}"></p:ajax>
                    <!-- .... lista de colunas de output e input do incell do datatable -->

No managed bean coloque mais ou menos o seguinte:

private List<Users> users;
 
public List<User> getUsers() {
        try {
            if (users == null)  //eh necessário verificar a nulidade para poder atualizar, senão retorna o valor do banco não salvo
                users = facade.findAll();  //facade jah instanciado
                return this.users; 
        } catch (Exception e) {
            //Mensagens ...
            return null;
        }
    }

   //método para editar vindo do listener do dataTable
    public void onEditRow(RowEditEvent event) {
        try {
        User use = (User) event.getObject();                 

        User user = facade.find(use.getId());

        user.setNome(use.getNome());
        //...
        facade.edit(user);
        
        } catch (Exception e) {
            //Mensagens...
           
        }
    }

assim funcionou para mim …

soh ainda não consegui fazer o delete funcionar …
se alguém tiver uma luz …

espero ter ajudado …

Criado 1 de agosto de 2011
Ultima resposta 9 de abr. de 2012
Respostas 3
Participantes 4