Estou tendo problemas ao tentar exibir uma mensagem de sucesso de exclusao depois que um usuario exclui um perfil confirmando em um confirmdialog.
Quando ele confirma a exclusao, ele e redirecionado para a mesma pagina carregando novamente os dados na datatable.
O que acontece e que entre o excluir e o redirecionar, a mensagem de sucesso nao e exibida. O que eu devo fazer para q ela seja exibida?
Estou redirecionando a pagina para carregar a datatable novamente porque possui um bug no primefaces quando na pagina 2 da paginacao eu possuo somente um registro.
Ao excluir ele, a tabela fica sem registros e eu devo clicar nas setas de navegacao para voltar pra pagina 1 e ter a tabela novamente carregada.
Entao por esse motivo eu tenho que carregar a pagina novamente apos a exclusao.
Segue os codigos.
PerfilController.java
package br.com.projeto.controle;
import java.io.Serializable;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import br.com.projeto.dao.PerfilDAO;
import br.com.projeto.modelo.Perfil;
import br.com.projeto.util.FacesMessageUtil;
@Component("perfilController")
@Scope(value = "session")
public class PerfilController implements Serializable {
private static final long serialVersionUID = 1L;
private static final String PERFIL = "/perfil/index.xhtml?faces-redirect=true";
private Perfil perfil;
@Autowired
private PerfilDAO perfilDAO;
private List<Perfil> perfisList;
public String iniciar() {
listar();
return PERFIL;
}
public List<Perfil> listar() {
perfisList = perfilDAO.listar();
return perfisList;
}
public String excluir() {
perfilBO.excluir(getPerfil());
FacesMessageUtil.addMensagemInfo("label.sucessoExclusao");
return iniciar();
}
public Perfil getPerfil() {
return perfil;
}
public void setPerfil(Perfil perfil) {
this.perfil = perfil;
}
public List<Perfil> getPerfisList() {
return perfisList;
}
public void setPerfisList(List<Perfil> perfisList) {
this.perfisList = perfisList;
}
}
FacesMessageUtil.java
package br.com.projeto.util;
import java.util.ResourceBundle;
import javax.faces.application.FacesMessage;
import javax.faces.application.FacesMessage.Severity;
import javax.faces.context.FacesContext;
public class FacesMessageUtil {
private static ResourceBundle bundle = ResourceBundle.getBundle("messages",
FacesContext.getCurrentInstance().getViewRoot().getLocale());
public static void addMenssagem(Severity severity, String messageKey) {
String message = bundle.getString(messageKey);
FacesMessage facesMessage = new FacesMessage(severity, message, message);
FacesContext fc = FacesContext.getCurrentInstance();
fc.addMessage("messages", facesMessage);
}
public static void addMensagemInfo(String messageKey) {
addMenssagem(FacesMessage.SEVERITY_INFO, messageKey);
}
public static void addMensagemError(String messageKey) {
addMenssagem(FacesMessage.SEVERITY_ERROR, messageKey);
}
public static void addMensagemWarn(String messageKey) {
addMenssagem(FacesMessage.SEVERITY_WARN, messageKey);
}
}
index.xhtml
<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:fn="http://java.sun.com/jsp/jstl/functions"
xmlns:p="http://primefaces.org/ui" template="/template/principal.xhtml">
<ui:define name="corpo">
<h:panelGrid styleClass="tabela80Porcento" cellspacing="2"
cellpadding="2" columns="1" columnClasses="colunaEsquerda">
<p:messages showDetail="true" autoUpdate="true" globalOnly="true" />
</h:panelGrid>
<h:form id="formTabela">
<p:dataTable id="perfilDataTable" styleClass="tabela80Porcento"
var="perfil" value="#{perfilController.perfisList}"
rowKey="#{perfilController.perfil}"
emptyMessage="#{i18n['label.nenhumRegistroEncontrado']}"
paginator="true" paginatorPosition="bottom" rows="5">
<f:facet name="header">
<h:outputText value="#{i18n['label.perfis']}" />
</f:facet>
<p:column sortBy="#{perfil.id}">
<f:facet name="header">
<h:outputText value="#{i18n['label.id']}" />
</f:facet>
<h:outputText value="#{perfil.id}" />
</p:column>
<p:column sortBy="#{perfil.nome}">
<f:facet name="header">
<h:outputText value="#{i18n['label.nome']}" />
</f:facet>
<h:outputText value="#{perfil.nome}" />
</p:column>
<p:column headerText="#{i18n['label.acoes']}"
styleClass="colunaCentralizada">
<p:commandLink id="excluir"
disabled="#{perfil.nome.equalsIgnoreCase('MASTER')}"
update=":formTabela:excluirPerfilConfirmDialog"
oncomplete="excluirPerfilConfirmDialog.show()">
<f:setPropertyActionListener value="#{perfil}"
target="#{perfilController.perfil}" />
<h:graphicImage value="/imagens/excluir.png" />
</p:commandLink>
<p:tooltip for="excluir" value="#{i18n['label.excluir']}" />
</p:column>
<f:facet name="footer">
<h:outputFormat value="#{i18n['label.totalRegistros']}">
<f:param value="#{fn:length(perfilController.perfisList)}" />
</h:outputFormat>
</f:facet>
</p:dataTable>
<p:confirmDialog id="excluirPerfilConfirmDialog" header="#{i18n['label.tituloExclusao']}"
severity="alert" widgetVar="excluirPerfilConfirmDialog">
<f:facet name="message">
<h:outputFormat value="#{i18n['label.confirmaExclusaoPerfil']}">
<f:param value="#{perfilController.perfil.nome}" />
</h:outputFormat>
</f:facet>
<div class="colunaCentralizada">
<p:commandButton value="#{i18n['label.sim']}"
action="#{perfilController.excluir}"
oncomplete="excluirPerfilConfirmDialog.hide();"
icon="imagemOk" />
<p:spacer width="10" />
<p:commandButton value="#{i18n['label.nao']}"
onclick="excluirPerfilConfirmDialog.hide();" icon="imagemCancelar" />
</div>
</p:confirmDialog>
</h:form>
</ui:define>
</ui:composition>