Boa tarde, pessoal.
Tenho um DataTable com um SingleSelection. Quando se clica em uma das linhas, uma Dialog é exibida com os valores do objeto selecionado.
Os dados são exibidos em um PanelGrid, dentro da Dialog. Tenho um CommandButton, que chama um método que invoca um método do Dao, responsável por fazer um update na base de dados.
Quando clico no CommandButton e ele chama o método do Bean, os dados do objetos estão nulos. Não sei onde está o erro.
Alguém sabe como posso corrigir isto?
Desde já, obrigado.
DataTable
<p:dataTable id="dataTableHEs" var="mhe" value="#{horaExtraBean.loadHorasExtrasRH()}" rowKey="#{mhe.id}"
paginator="true" rows="20" selectionMode="single" selection="#{horaExtraBean.horaExtra}" >
<p:ajax event="rowSelect" update=":mainForm:panelGridDialog :mainForm:panelGridDialog"
oncomplete="dialogModalSupervisao.show()" />
<p:growl id="mainGrowl" showDetail="true" />
<p:column headerText="Funcionário">
<h:outputText value="#{mhe.funcionario.nome}" />
</p:column>
<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="Data Aprov. Sup.">
<h:outputText value="#{mhe.dataAprovadoSupervisor}">
<f:convertDateTime pattern="dd/MM/yyyy" />
</h:outputText>
</p:column>
<p:column headerText="Aprovação Sup.">
<h:outputText value="#{mhe.aprovadoSupervisorOutput}" />
</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="Aprovação RH">
<h:outputText value="#{mhe.aprovadoRHOutput}" />
</p:column>
<p:column headerText="Motivo Cancel.">
<h:outputText value="#{mhe.motivoCancelamento.descricao}" />
</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:dataTable>
Dialog
<p:dialog id="dialogModalSupervisao" header="Revisão de Hora Extra" widgetVar="dialogModalSupervisao"
modal="true" width="360" height="260" resizable="false">
<h:panelGrid id="panelGridDialog" columns="2" cellpadding="1" class="dialog-form">
<p:outputLabel for="inputData" id="lblData" value="Data da Hora Extra:" />
<p:calendar disabled="true" id="inputData" 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="calendarData" id="lblDataSolicitacao" value="Data da Solicitação:" />
<p:calendar disabled="true" id="calendarData" value="#{horaExtraBean.horaExtra.dataCadastro}" 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 disabled="true" 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 disabled="true" id="spinnerTotalDeHoras" value="#{horaExtraBean.horaExtra.quantidadeHoraExtraGerada}" size="2" />
<p:outputLabel for="inputTextAreaObservacoes" value="Observações:" />
<p:inputTextarea disabled="true" id="inputTextAreaObservacoes" value="#{horaExtraBean.horaExtra.observacoes}" cols="24" rows="3" />
<p:selectOneRadio disabled="#{horaExtraBean.horaExtra.aprovadoSupervisor != 1}" id="aprovacao" value="#{horaExtraBean.horaExtra.aprovadoRH}">
<p:ajax process=":mainForm:panelGridDialog" event="change" />
<f:selectItem itemLabel="Aprovar" itemValue="Aprovado" />
<f:selectItem itemLabel="Reprovar" itemValue="Reprovado" />
</p:selectOneRadio>
<p:outputLabel for="autoCompleteMotivoCancelamento" id="lblMotivoCancelamento" value="Motivo do Cancelamento: " />
<p:autoComplete disabled="#{(horaExtraBean.horaExtra.aprovadoRH != 'Reprovado') or (horaExtraBean.horaExtra.aprovadoSupervisor != 1)}"
id="autoCompleteMotivoCancelamento"
completeMethod="#{motivoCancelamentoBean.autocompleteDescricao()}"
value="#{horaExtraBean.horaExtra.motivoCancelamento.descricao}"
dropdown="true" scrollHeight="150">
</p:autoComplete>
<p:commandButton disabled="#{horaExtraBean.horaExtra.aprovadoSupervisor != 1}" value="Concluir"
action="#{horaExtraBean.updateAprovacaoRH()}"
update=":mainForm:dataTableHEs"
onclick="dialogModalSupervisao.close()"
oncomplete="#{horaExtraBean.loadHorasExtrasRH()}"
icon="ui-icon-check"/>
</h:panelGrid>
</p:dialog>
Método do Bean
public void updateAprovacaoRH() {
if (this.horaExtra.getAprovadoRH().equals(EEstadoAprovacao.Reprovado) && this.horaExtra.getMotivoCancelamento() != null) {
MotivoCancelamentoDao motivoCancelamentoDao = new MotivoCancelamentoDao();
MotivoCancelamento motivoCancelamento = new MotivoCancelamento();
motivoCancelamento = motivoCancelamentoDao.getByDescricao(this.horaExtra.getMotivoCancelamento().getDescricao());
this.horaExtraDao.updateAprovacaoRH(this.horaExtra, motivoCancelamento.getId());
} else {
this.horaExtraDao.updateAprovacaoRH(this.horaExtra, 0);
}
}
