Bom dia, pessoal.
A situação:
Dentro de um dataTable, tenho um commandButton em cada linha. Ao clicar neste commandButton, uma dialog é exibida com um campo de data. Ao informar a data e clicar em salvar, é feito um update em uma tabela do banco.
O problema:
Quando clico em um determinado botão, de uma determinada linha, os valores selecionados sempre equivalem ao primeiro registro deste dataTable. Ou seja, consigo selecionar qualquer registro, mas o valor não vem corretamente, vem sempre referente ao primeiro registro exibido no dataTable.
Alguém que passou por este problema ou sabe como sulucioná-lo, peço ajuda.
Desde já, muito obrigado.
Segue meu XHTML:
<!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:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui"
xmlns:ui="http://java.sun.com/jsf/facelets">
<h:head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<link href="../script/css/style.css" rel="stylesheet" type="text/css"
media="all" />
<title>RH :: Horas Extras</title>
</h:head>
<h:body>
<ui:include src="#{applicationBean.headerFile}" />
<h:form id="mainForm">
<p:growl id="mainGrowl" showDetail="true" />
<p:panel id="mainPanel">
<f:facet name="header">
<p>Minhas Horas Extras</p>
<p>
<p:commandButton value="Todas"
action="#{horaExtraBean.loadMinhasHorasExtras()}"
update=":mainForm:dataTableHEs"
icon="ui-icon-circle-zoomin">
</p:commandButton>
<p:commandButton value="Aguardando RH"
action="#{horaExtraBean.loadByEstadoAguardando()}"
update=":mainForm:dataTableHEs"
icon="ui-icon-clock">
</p:commandButton>
<p:commandButton value="Aprovadas"
action="#{horaExtraBean.loadByEstadoAprovadas()}"
update=":mainForm:dataTableHEs"
icon="ui-icon-circle-check">
</p:commandButton>
<p:commandButton value="Pagamento em Folha"
action="#{horaExtraBean.loadByEstadoPagamentoEmFolha()}"
update=":mainForm:dataTableHEs"
icon="ui-icon-note">
</p:commandButton>
<p:commandButton value="Banco de Horas"
action="#{horaExtraBean.loadByEstadoBancoDeHoras()}"
update=":mainForm:dataTableHEs"
icon="ui-icon-disk">
</p:commandButton>
<p:commandButton value="Reprovadas"
action="#{horaExtraBean.loadByEstadoReprovadas()}"
update=":mainForm:dataTableHEs"
icon="ui-icon-circle-close">
</p:commandButton>
<span class="commandButton-cadastrar">
<p:commandButton value="Cadastrar"
oncomplete="dialogModalCadastrar.show()"
icon="ui-icon-plusthick">
</p:commandButton>
</span>
</p>
</f:facet>
<p:dataTable id="dataTableHEs" var="mhe" value="${horaExtraBean.loadMinhasHorasExtras()}" rowKey="#{mhe.id}"
paginator="true" rows="20" selectionMode="single" selection="#{horaExtraBean.horaExtra}" >
<p:column headerText="Data Cad.">
<h:outputText value="#{mhe.dataCadastro}">
<f:convertDateTime pattern="dd/MM/yyyy" />
</h:outputText>
</p:column>
<p:column headerText="Data">
<h:outputText value="#{mhe.dataHoraExtra}">
<f:convertDateTime pattern="dd/MM/yyyy" />
</h:outputText>
</p:column>
<p:column headerText="Motivo">
<h:outputText value="#{mhe.motivo.descricao}" />
</p:column>
<p:column headerText="Aprovação Sup.">
<h:outputText value="#{mhe.aprovadoSupervisorOutput}" />
</p:column>
<p:column headerText="Data Aprov. Sup.">
<h:outputText value="#{mhe.dataAprovadoSupervisor}">
<f:convertDateTime pattern="dd/MM/yyyy" />
</h:outputText>
</p:column>
<p:column headerText="Aprovação RH">
<h:outputText value="#{mhe.aprovadoRHOutput}" />
</p:column>
<p:column headerText="Data Aprov. RH">
<h:outputText value="#{mhe.dataAprovacaoRH}">
<f:convertDateTime pattern="dd/MM/yyyy" />
</h:outputText>
</p:column>
<p:column headerText="Motivo Cancelam.">
<h:outputText value="#{mhe.motivoCancelamento.descricao}" />
</p:column>
<p:column headerText="Folga Agend.">
<h:outputText value="#{mhe.dataFolgaAgendada}">
<f:convertDateTime pattern="dd/MM/yyyy" />
</h:outputText>
</p:column>
<p:column headerText="Tot. Horas">
<h:outputText value="#{mhe.quantidadeHoraExtraGerada}" />
</p:column>
<p:column headerText="Tipo">
<h:outputText value="#{mhe.tipoHoraExtraGerada}" />
</p:column>
<p:column headerText="Obs.">
<h:outputText value="#{mhe.observacoes}" />
</p:column>
<p:column>
<p:commandButton rendered="true"
oncomplete="dialogModalAgendarFolga.show()"
update=":mainForm:panelGridAgendamento"
icon="ui-icon-calendar" title="Agendar Folga" >
<f:setPropertyActionListener target="#{horaExtraBean.horaExtra}" value="#{mhe}" />
</p:commandButton>
</p:column>
</p:dataTable>
</p:panel>
<p:dialog id="dialogModalAgendarFolga" header="Agendar Hora Extra" widgetVar="dialogModalAgendarFolga"
modal="true" width="320" height="70" resizable="false">
<p:ajax event="close" update=":mainForm:dataTableHEs" />
<h:panelGrid id="panelGridAgendamento" columns="3" cellpadding="1" class="dialog-form">
<p:outputLabel for="calendarData" id="lblData" value="Data:" />
<p:calendar widgetVar="mhe" id="calendarData" value="#{mhe.dataFolgaAgendada}" navigator="true" pattern="dd/MM/yyy" showOn="button">
<f:convertDateTime pattern="dd/MM/yy" timeZone="GMT-3" type="date" locale="pt" dateStyle="short"/>
</p:calendar>
<p:commandButton value="Salvar" icon="ui-icon-check"
action="#{horaExtraBean.updateDataFolgaAgendada(mhe)}"
onclick="dialogModalCadastrar.close()" />
</h:panelGrid>
</p:dialog>
</h:form>
<p:dialog id="dialogModalCadastrar" header="Cadastro de Hora Extra" widgetVar="dialogModalCadastrar"
modal="true" width="320" height="170" resizable="false">
<h:form>
<h:panelGrid id="panelGridDialog" columns="2" cellpadding="1" class="dialog-form">
<p:outputLabel for="calendarData" id="lblData" value="Data:" />
<p:calendar id="calendarData" value="#{horaExtraBean.horaExtra.dataHoraExtra}" navigator="true" pattern="dd/MM/yyy" showOn="button">
<f:convertDateTime pattern="dd/MM/yy" timeZone="GMT-3" type="date" locale="pt" dateStyle="short"/>
</p:calendar>
<p:outputLabel for="autoCompleteMotivo" id="lblMotivo" value="Motivo:" />
<p:autoComplete id="autoCompleteMotivo" value="#{horaExtraBean.horaExtra.motivo.descricao}" completeMethod="#{motivoBean.autocompleteDescricao()}" dropdown="true" scrollHeight="150" />
<p:outputLabel for="spinnerTotalDeHoras" id="lblTotalDeHoras" value="Qdt. de Horas:" />
<p:spinner id="spinnerTotalDeHoras" value="#{horaExtraBean.horaExtra.quantidadeHoraExtraGerada}" size="2" />
<p:outputLabel for="inputTextAreaObservacoes" value="Observações:" />
<p:inputTextarea id="inputTextAreaObservacoes" value="#{horaExtraBean.horaExtra.observacoes}" cols="24" rows="3" />
<p>
<p:commandButton value="Solicitar" action="#{horaExtraBean.insertBasic()}"
update=":mainForm:mainPanel"
onclick="dialogModalCadastrar.close()"
icon="ui-icon-check"/>
</p>
</h:panelGrid>
</h:form>
</p:dialog>
</h:body>
</html>
