Ola pessoal,estou com um problema em capturar uma exceção especifica e a partir dai mostrar uma mensagem na minha página.Estou usando o catch para capturar ConstraintViolationException depois relanço até minha classe bean uma exceção nova que criei,assim eu capturo a mesma e dentro do catch da bean uso uma faces message.Mas acontece o seguinte a mensagem não e mostrada na pagina,ja verifiquei se tudo ocorre como planejei e pelo que eu sei esta certo.
este é o codigo da minha classe de persitencia:
@Override
public void salvar(Empresa empresa) throws DAOException{
try{
this.session.save(empresa);
this.session.flush();
}catch(ConstraintViolationException e){
throw new DAOException ("chave duplicada");
}
}
Depois de lançar esta exceção DAOException, é relançada por mais duas classes até chegar na classe bean que o codigo esta aqui:
public String salvar(){
EmpresaRN empresaRN = new EmpresaRN();
if(empresaSelecionada.getCod_empresa() == null){
try {
empresaRN.salvar(empresa);
return "/publico/cadastro_empresa.xhtml";
} catch (DAOException e) {
if(e.getMessage() != null){
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN, "Warning!", e.getMessage()));
System.out.println("erro1:" + e);
}
e.printStackTrace();
}
}else{
empresaRN.atualizar(empresa);
return "/publico/cadastro_empresa.xhtml";
}
return null;
}
Por ultimo aqui está minha pagina jsf:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html 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:p="http://primefaces.org/ui">
<h:head>
<title>Empresa</title>
<f:metadata>
<f:viewParam name = "cd_em" value = "#{empresaBean.empresaSelecionada.cod_empresa}"/>
</f:metadata>
</h:head>
<ui:composition template="/template/interna.xhtml">
<ui:define name="titulo">Cadastro de Empresa</ui:define>
<ui:define name="corpo">
<h:form id = "cadastroEmpresa">
<p:messages id="messages" showDetail="true"
closable="true"
autoUpdate="true"/>
<div class = "ui-fluid">
<p:panelGrid columns="2" styleClass="ui-panelgrid-blank" >
<p:outputLabel value = "Código Empresa" for = "codigoEmpresa"/>
<p:inputText value="#{empresaBean.iniciar().cod_empresa}"
required="true"
id = "codigoEmpresa"
maxlength="11"
disabled = "#{empresaBean.opcao()}"/>
<p:outputLabel value="Descrição:" for = "descrição"/>
<p:inputText value="#{empresaBean.iniciar().descricao}"
required="true"
id = "descrição"
maxlength="60"
size = "60"
validatorMessage="O campo descrição deve ter no máximo 60 caracteres">
<f:validateLength minimum="1" maximum="60"/>
</p:inputText>
<p:commandButton action = "#{empresaBean.salvar()}"
value = "Salvar"
/>
</p:panelGrid>
</div>
</h:form>
</ui:define>
</ui:composition>
</html>
Obrigado desde já pessoal!
Obs:Estou usando Hibernate.