Exibir FacesMessages

1 resposta
D

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>

1 Resposta

H
Tenta fazer o seguinte, no seu botão
<p:commandButton value="#{i18n['label.sim']}"  
                          
                        action="#{perfilController.excluir}"  
                        oncomplete="excluirPerfilConfirmDialog.hide();"  
                         icon="imagemOk" />
coloca ajax="false"

E após excluir, retorne apenas /perfil/index.xhtml sem o redirect.

Criado 17 de fevereiro de 2012
Ultima resposta 17 de fev. de 2012
Respostas 1
Participantes 2