@elwerle escreveu:
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."); }
Mensagens: 1
Participantes: 1