Versão atual:

Problema ao atualizar dataTable

Tenho uma dataTable com alguns dados e um botão editar que chama um Dialog que possui um campo para ser editado. Eu edito normalmente o objeto porém na hora que a dataTable carrega ela não traz o objeto atualizado e sim o antigo, eu dou um F5 e atualiza para os dados recentes porem se eu dou outro F5 voltam os dados antigos.

Ou seja, cada F5 que eu dou aparecem dados diferentes na mesma linha da dataTable, uma hora os dados atualizados e outra hora os dados antigos. Alguém sabe o porque disso?

Método listar que fica no bean:

public void listar() {
        listaTarefa = new ArrayList<>();
        System.err.println("Metodo Listar");
        try {
            TarefaDAO tarefaDAO = new TarefaDAO();
            listaTarefa = tarefaDAO.listarPorUsuario(usuarioBean
                    .getUsuarioLogado());

        } catch (RuntimeException e) {
            FacesUtil.adicionarMsgErro("Erro ao listar tarefas: "+e.getMessage());
        }
    }

E esse é meu método editar:

public void pausarTarefa(){
        System.err.println("Pausar");
        try {
            tarefa.setStatus("Pausado");
            tarefa.setDataFim(new Date());

            TarefaDAO tarefaDAO = new TarefaDAO();
            tarefaDAO.editar(tarefa);    
            FacesUtil.adicionarMsgInfo("Tarefa Pausada com Sucesso");
            tarefa = new Tarefa();
            for(int i=0;i<listaTarefa.size();i++){
                listaTarefa.remove(i);
            }


        } catch (RuntimeException e) {
            FacesUtil.adicionarMsgErro("Erro ao Pausar Tarefa");
            e.printStackTrace();
        }
    }

O escopo do meu Bean é do tipo ViewScoped.

Aqui está minha pagina:

<ui:composition template="/WEB-INF/templates/LayoutPadrao.xhtml"
    xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://xmlns.jcp.org/jsf/html"
    xmlns:f="http://xmlns.jcp.org/jsf/core"
    xmlns:p="http://primefaces.org/ui"
    xmlns:ui="http://java.sun.com/jsf/facelets">

    <ui:define name="titulo">TarefaManager</ui:define>

    <ui:define name="corpo">
    <f:metadata>
    <f:event listener="#{tarefaBean.listar()}" type="preRenderView"></f:event>
    </f:metadata>
        <h:form id="frmPrin">
            <h1>Controle de Tarefas</h1>
            <p:toolbar style="margin-top: 20px">
                <p:toolbarGroup>
                    <p:commandButton value="Nova Tarefa" onclick="PF('dlg2').show();" />
                </p:toolbarGroup>
            </p:toolbar>
            <p:dataTable value="#{tarefaBean.listaTarefa}" id="tarefaTable"
                var="tarefa" style="margin-top: 20px"
                emptyMessage="Nenhuma Tarefa Encontrada. " rows="10"
                paginator="true" paginatorAlwaysVisible="false"
                paginatorPosition="botton">

                <p:column headerText="Código Tarefa"
                    style="text-align: center; width: 90px">
                    <h:outputText value="#{tarefa.codigoTarefa}" />
                </p:column>

                <p:column headerText="Tarefa" style="width: 270px">
                    <h:outputText value="#{tarefa.tarefa}" />
                </p:column>

                <p:column headerText="Descrição" style="width: 520px">
                    <h:outputText value="#{tarefa.descTarefa}" />
                </p:column>

                <p:column headerText="Data de Inicio" style="width: 120px">
                    <h:outputText value="#{tarefa.dataInicio}">
                        <f:convertDateTime pattern="dd.MM.yyyy HH:mm:ss" timeZone="GMT-3" />
                    </h:outputText>

                </p:column>

                <p:column headerText="Data Finalização" style="width: 120px">
                    <h:outputText value="#{tarefa.dataFim}"
                        rendered="#{tarefa.dataInicio != tarefa.dataFim}">
                        <f:convertDateTime pattern="dd.MM.yyyy HH:mm:ss" timeZone="GMT-3" />
                    </h:outputText>
                </p:column>

                <p:column headerText="Status">
                    <h:outputText value="#{tarefa.status}" />
                </p:column>

                <p:column headerText="Usuario">
                    <h:outputText value="#{tarefa.usuario.nome}" />
                </p:column>

                <p:column headerText="Ações" style="text-align:center">
                    <p:commandButton icon="ui-icon-check" title="Finalizar"
                        oncomplete="PF('dlg4').show();" update=":frmPrin:dialog2">
                        <f:setPropertyActionListener target="#{tarefaBean.tarefa}"
                            value="#{tarefa}" />
                    </p:commandButton>

                    <p:commandButton icon="ui-icon-pause" title="Pausar"
                        oncomplete="PF('dlg3').show();" update=":frmPrin:dialog3">
                        <f:setPropertyActionListener target="#{tarefaBean.tarefa}"
                            value="#{tarefa}" />
                    </p:commandButton>
                </p:column>

            </p:dataTable>

            <p:dialog header="Cadastrar Nova Tarefa" widgetVar="dlg2"
                modal="true" height="400" width="860">
                <p:panelGrid columns="2" cellpadding="4"
                    style="width:100%;margin-top:20px" columnClasses="rotulo, campo">
                    <p:outputLabel value="Tarefa" for="tarefa" />
                    <p:inputText id="tarefa" size="37"
                        value="#{tarefaBean.tarefa.tarefa}" />

                    <p:outputLabel value="Descrição" />
                    <h:panelGroup>
                        <p:inputTextarea rows="5" cols="30" counter="display"
                            maxlength="255" counterTemplate="{0} Caracteres Restantes."
                            autoResize="false" style="width:50%"
                            value="#{tarefaBean.tarefa.descTarefa}" />
                        <br />
                        <h:outputText id="display" />
                    </h:panelGroup>

                </p:panelGrid>
                <p:commandButton value="Iniciar Tarefa"
                    style="margin-left:25%;margin-top:20px;width:50%"
                    actionListener="#{tarefaBean.salvar}" update=":msgGlobal :frmPrin" />
            </p:dialog>



            <p:dialog header="Pausar Atividade" widgetVar="dlg3" id="dialog3"
                modal="true" height="300" width="700">
                <p:panelGrid columns="2" cellpadding="4"
                    style="width:100%;margin-top:20px" columnClasses="rotulo, campo">
                    <p:outputLabel value="Motivo" />
                    <h:panelGroup>
                        <p:inputTextarea rows="5" cols="30" counter="display1"
                            maxlength="255" counterTemplate="{0} Caracteres Restantes."
                            autoResize="false" style="width:70%"
                            value="#{tarefaBean.tarefa.comentario}" />
                        <br />
                        <h:outputText id="display1" />
                    </h:panelGroup>

                </p:panelGrid>
                <p:commandButton value="Pausar Tarefa"
                    style="margin-left:25%;margin-top:20px;width:50%"
                    action="#{tarefaBean.pausarTarefa}"
                    update=":msgGlobal: frmPrin:tarefaTable" />
            </p:dialog>


            <p:dialog header="Finalizar Atividade" widgetVar="dlg4" id="dialog2"
                modal="true" height="300" width="700">
                <p:panelGrid columns="2" cellpadding="4"
                    style="width:100%;margin-top:20px" columnClasses="rotulo, campo">
                    <p:outputLabel value="Comentário" />
                    <h:panelGroup>
                        <p:inputTextarea rows="5" cols="30" counter="display2"
                            maxlength="255" counterTemplate="{0} Caracteres Restantes."
                            autoResize="false" style="width:70%" value="#{tarefaBean.tarefa.comentario}"/>
                        <br />
                        <h:outputText id="display2" />
                    </h:panelGroup>

                </p:panelGrid>
                <p:commandButton value="Finalizar Tarefa"
                    style="margin-left:25%;margin-top:20px;width:50%"
                    action="#{tarefaBean.finalizarTarefa}"
                    update=":msgGlobal: frmPrin:tarefaTable" />
            </p:dialog>

        </h:form>
    </ui:define>
</ui:composition>

Método editar no DAO:

public void editar(Tarefa tarefa) {

        Session sessao = HibernateUtil.getSessionFactory().openSession();
        System.out.println("TAREFA: "+tarefa);
        Transaction transacao = null;
        try {        
            transacao = sessao.beginTransaction();
            Tarefa solicitacaoEditar = buscarPorCodigo(tarefa.getCodigoTarefa());

            solicitacaoEditar.setStatus(tarefa.getStatus());
            solicitacaoEditar.setDataFim(tarefa.getDataFim());
            solicitacaoEditar.setComentario(tarefa.getComentario());        
            sessao.update(solicitacaoEditar);
            transacao.commit();

        } catch (RuntimeException ex) {
            ex.printStackTrace();
            System.err.println("Transacao: "+transacao);
            if (transacao != null) {
                transacao.rollback();
            }
            throw ex;
        } finally {
            sessao.close();
        }

    }

Versões(2):

Ver a versão formatada

Problema ao atualizar dataTable

  • criado 14 de jul de 2015

Comentário

new question