Não consigo editarlinha no banco, com t:DataTable

4 respostas
V

Bom dia ae para todos.

Estou desenvolvendo uma aplicação de ponto eletronico ondi nela tenho uma area na administração de abonar faltas.
na minha aplicação JEE utilizo o Facelets, Tomahawk, JSF.

Na pagina de abonarFaltas

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:t="http://myfaces.apache.org/tomahawk"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
>
    
    <body>
        <ui:composition template="template.xhtml">
            <ui:define name="navegacao">
                Abonar Faltas
            </ui:define>
            <ui:define name="body">
                <h:form id="formAbonar" >
                    <t:messages />
                    <t:panelGrid columns="2" >
                        <t:outputText value="Funcionarios" styleClass="labels" />
                        
                        <t:selectOneListbox  styleClass="camposAdmin" value="#{AbonarFaltas.pessoa.id}">
                            <f:selectItems value="#{AbonarFaltas.listaPessoas}"/>
                        </t:selectOneListbox>
                        
                        <t:outputText value="Data:" styleClass="labels"/>
                        <t:panelGroup >
  
                            <t:inputDate popupCalendar="true" required="true" value="#{AbonarFaltas.dataDoPonto}" >
                            </t:inputDate>
                        </t:panelGroup>
                        <t:outputText value="" styleClass="camposAdmin"/>
                        <h:commandButton value="Buscar" styleClass="botaoAdmin" action="#{AbonarFaltas.buscarPontoPessoa}"/>
                    </t:panelGrid>
                    <t:dataTable id="tabelaDados" preserveDataModel="false" value="#{AbonarFaltas.listaPontoPessoa}" rows="10" var="ponto" align="center" rowClasses="listasRow1,listasRow2" styleClass="listas" headerClass="listasHeader" cellpadding="2" cellspacing="0">
                       
                        <t:column>
                            <f:facet name="header">
                                <h:outputText value="Id"/>
                            </f:facet>
                            <t:outputText value="#{ponto.id}"/>
                        </t:column>
                        <t:column>
                            <f:facet name="header">
                                <h:outputText value="Pessoa"/>
                            </f:facet>
                            <t:outputText value="#{ponto.pessoa.nome}"/>
                        </t:column>
                        <t:column>
                            <f:facet name="header">
                                <h:outputText value="Turno"/>
                            </f:facet>
                            <t:outputText value="#{ponto.turno}"/>
                        </t:column>
                        <t:column>
                            <f:facet name="header">
                                <h:outputText value="Entrada"/>
                            </f:facet>
                            <t:outputText value="#{ponto.horaEntrada}" rendered="#{! ponto.editavel}" >
                                <f:convertDateTime pattern="HH:mm" locale="pt_BR" timeZone="GMT-3" />
                            </t:outputText>
                            <t:inputText value="#{ponto.horaEntrada}" styleClass="camposAdmin" size="7" rendered="#{ponto.editavel}">
                                <f:convertDateTime pattern="HH:mm" locale="pt_BR" timeZone="GMT-3" />
                            </t:inputText>
                        </t:column>
                        <t:column>
                            <f:facet name="header">
                                <h:outputText value="Saida"/>
                            </f:facet>
                            <t:outputText value="#{ponto.horaSaida}" rendered="#{! ponto.editavel}">
                                <f:convertDateTime pattern="HH:mm" locale="pt_BR" timeZone="GMT-3" />
                            </t:outputText>
                            <t:inputText value="#{ponto.horaSaida}" styleClass="camposAdmin" size="7" rendered="#{ponto.editavel}">
                                <f:convertDateTime pattern="HH:mm" locale="pt_BR" timeZone="GMT-3" />
                            </t:inputText>
                        </t:column>
                        <t:column>
                            <t:selectBooleanCheckbox value="#{ponto.editavel}" onclick="submit()" immediate="true"/>
                        </t:column>
                        <t:column >
                            <h:commandLink rendered="#{ponto.editavel}" value="Salvar" action="#{AbonarFaltas.salvarPonto}" immediate="true">
                            </h:commandLink>
                        </t:column>
                        
                    </t:dataTable>
                </h:form>
            </ui:define>
        </ui:composition>
    </body>
</html>

utilizo um t:dataTable que é preenchida apos a escolha de uma pessoa. Em cada linha do datatable tenho um checkbox, para editar a pessoa.
O problema é qdo eu marco o checkbox é renderizado o t:inputText, nisso é inserido um novo horario e então é clicado no botao “Salvar”, esse botao está ligado ao método

public String salvarPonto(){
        
        Ponto ponto = (Ponto) listaPontoPessoa.getRowData();
        
        SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
        System.out.println("hora == " + sdf.format(ponto.getHoraEntrada()));
        pontoBean.salvarPonto(ponto);
        
        init();
        return null;
    }

e método listaPontoPessoa.getRowData(); me retorna somente o horário antigo e não o novo horario inserido. Por isso é atualizado a mesma hora no banco.

espero que alguem me ajude.

grato[/b]

4 Respostas

L

Xutando… pois nunca precisei alterar algum item da lista da datatable assim e tb to meio sem tempo aqui para testar…

Mas tenta tirar o immediate=“true”

Se não funcionar me avisa que agora fiquei curioso tb, ai tento fazer hj anoite em casa.

V

cara valeu ae
tirei o immediate=“true”
funcionou blz.

neim tinha pensando nisso
abraço

L

Eh, esse immediate costuma dar uns “problemas” desse tipo

Se quizer, da uma lida nesse artigo
http://www-128.ibm.com/developerworks/library/j-jsf2/
é sobre o ciclo de vida da requisição JSF

valeu

M

Opa,

Detalhe só: o imediate não faz o apply request values que valida se tem dados em branco e tal… e tome cuidado que quando o cara selecionar a mesma lista que gerou sua tabela tem que estar disponível, senão não funciona.

:okok:

Criado 3 de agosto de 2007
Ultima resposta 6 de ago. de 2007
Respostas 4
Participantes 3