To fazendo uma tela com um dataTable do primefaces, onde listo os dados de uma tabela, e a partir dela edito o registro em um dialog. Tudo funcionando ok.
O meu problema é quando faço uma validação e retorno um erro. Tipo tendo um campo do banco com unique ex campo descrição, verifico se já existe, se sim retorno a mensagem de erro e não salva, como deve ser. Só que ai ele dá o update no datatable, como deveria caso estivesse sem erro de validação. Fiz uma alteração pra ele só dar o update se estiver ok via context.update(“frm:tblAss”) deu certo não atualizou o dataTable quando com erro. Mas quando eu clico no mesma linha da dataTable ele me mostra no dialog o valor do registro que tinha no erro e não o valor que tá aparecendo no DataTable.
Se alguem tiver uma ideia de como melhor isso.
XHTML
<h:form id="frm">
<p:messages autoUpdate="true" closable="true" />
<p:dataTable id="tblAss" var="ass" value="#{tipoAssinaturasBean.listaTipoAssinaturas}"
emptyMessage="Nenhum registro encontrado." style="width:800px"
paginator="true" paginatorAlwaysVisible="false" paginatorPosition="bottom" rows="15">
<p:column headerText="Código" width="10%">
<h:outputText value="#{ass.id}"/>
</p:column>
<p:column headerText="Descrição">
<h:outputText value="#{ass.descricao}"/>
</p:column>
<p:column width="10%" style="text-align: center">
<p:commandButton icon="ui-icon-pencil" title="Editar" oncomplete="PF('dlgAlt').show();"
process="@this" update="frm:dlg">
<f:setPropertyActionListener target="#{tipoAssinaturasBean.tipoAssinatura}" value="#{ass}"/>
<p:resetInput target="frm:grid"/>
</p:commandButton>
<p:commandButton icon="ui-icon-trash" title="Excluir" oncomplete="PF('cfmExclusao').show();"
process="@this" update=":frm:cfm">
<f:setPropertyActionListener target="#{tipoAssinaturasBean.tipoAssinatura}" value="#{ass}"/>
</p:commandButton>
</p:column>
</p:dataTable>
<p:commandButton value="Novo" icon="ui-icon-document" style="margin-top: 5px" oncomplete="PF('dlgAlt').show();"
process="@this" update="frm:dlg" action="#{tipoAssinaturasBean.novo}" >
<p:resetInput target="frm:grid"/>
</p:commandButton>
<p:confirmDialog header="Exclusão Tipo Assinatura" widgetVar="cfmExclusao" id="cfm"
message="Tem certeza que deseja excluir tipo de Assinatura #{tipoAssinaturasBean.tipoAssinatura.id}?">
<p:button value="Não" onclick="PF('cfmExclusao').hide();return false;" />
<p:commandButton value="Sim" oncomplete="PF('cfmExclusao').hide();" process="@this"
action="#{tipoAssinaturasBean.excluir()}" update=":frm:tblAss"/>
</p:confirmDialog>
<p:dialog header="Alterações" widgetVar="dlgAlt" id="dlg" modal="true" >
<p:messages id="msg" />
<p:panelGrid id="grid" columns="2">
<p:outputLabel value="Código" for="cod" />
<p:inputText id="cod" value="#{tipoAssinaturasBean.tipoAssinatura.id}" disabled="true" />
<p:outputLabel value="Descrição" for="desc"/>
<p:inputText id="desc" value="#{tipoAssinaturasBean.tipoAssinatura.descricao}" />
</p:panelGrid>
<p:commandButton value="Salvar" action="#{tipoAssinaturasBean.salvar()}"
oncomplete="if(!args.validationFailed && args.salvo){ PF('dlgAlt').hide() }"
process="@this frm:dlg" update="msg grid"/>
</p:dialog>
</h:form>
Método Salvar
public void salvar() {
RequestContext context = RequestContext.getCurrentInstance();
context.addCallbackParam("salvo", false);
tipoAssinaturasRn.salvar(tipoAssinatura);
if(!listaTipoAssinaturas.contains(tipoAssinatura)){
listaTipoAssinaturas.add(tipoAssinatura);
}
context.addCallbackParam("salvo", true);
context.update("frm:tblAss");
FacesUtil.addInfoMessage("Tipo Assinatura salvo com Sucesso.");
}