Bom dia,
Gostaria da ajuda da lista para tirar uma dúvida a respeito de como tratar uma exception gerada dentro de uma regra de negocio e mostra-la de maneira amigavel para o usuário.
Por exemplo.
O usuário informa o código do cliente para ser recuperado no banco de dados atraves do action buscarUsuario que esta dentro do meu Managed-bean.
Quando o usuario existe no banco de dados ele o mostra normalmente na página jsf, mas vamos supor que o código informado não exista no banco de dados.
Eu gostaria de mostrar uma mensagem na página JSF dizendo "Cliente não foi encontrado no banco de dados".
Outro caso.
Um trecho de um Managed-bean para ilustrar a minha dúvida…
public String renovarChave() throws Throwable {
Criptografia crip = new Criptografia();
DateFormat df = DateFormat.getDateInstance();
Query query;
Licensa licensa = null ;
try {
// verifica se esta liberado para gerar chaves
query = em.createNamedQuery("Liberacao.findAll");
Liberacao liberacao = (Liberacao) query.getSingleResult();
if (liberacao.getStatus().equals("N")) {
throw new Throwable("Sistema bloqueado para renovacao de chaves");
}
// find old key in database
query = em.createNamedQuery("Licensa.findByLicensekey");
query.setParameter("licensekey", theOldKey);
licensa = (Licensa) query.getSingleResult();
Date hoje = new Date() ;
// verifica se a chave esta vencida
int diasParaTravar = Util.dataDiff(hoje, licensa.getDataTrava() ) ;
// Permiti gerar a nova chave a partir de 10 dias para vencer
if( diasParaTravar > 10 ) {
throw new Throwable("Chave esta dentro do periodo de operação" ) ;
}
String key = crip.Desencripta(theOldKey);
String hd = key.substring(10, 18);
Date data = df.parse(key.substring(0, 10));
Calendar dataProximaTrava = Calendar.getInstance();
dataProximaTrava.setTime(data);
dataProximaTrava.add(Calendar.DATE, Dias);
theNewKey = crip.Encripta( df.format(dataProximaTrava.getTime()) + hd ) ;
} catch (ParseException ex) {
Logger.getLogger(MyKeyManagerBean.class.getName()).log(Level.SEVERE, null, ex);
}
return "refresh";
}
A dúvida é como mostrar de maneira amigavel no JSP a mensagem gerada pelo
throw new Throwable("Sistema bloqueado para renovacao de chaves" ) ;
ou alguma outra exception gerada dentro da regra de negocio do meu managed-bean…
Um trecho da página JSF
<a4j:form ajaxSubmit="true" reRender="painel1" ignoreDupResponses="true">
<a4j:outputPanel ajaxRendered="true"><rich:messages /></a4j:outputPanel>
<br/>
<rich:panel id="painel1" header="Dados para Renovação da Licensa">
<h:outputText value="Chave atual (19 dígitos)" />
<br/>
<h:inputText value="#{MyKeyManagerBean.theOldKey}"
size="30"
required="true"
maxlength="19"
validatorMessage="Tamanho da chave atual não é valida"
requiredMessage="Chave atual é obrigatória" >
<f:validateLength minimum="19"/>
</h:inputText>
<br/>
<h:outputText value="Dias de Liberação" />
<br/>
<h:inputText value="#{MyKeyManagerBean.dias}"
required="true"
validatorMessage="Quantidade de dias permitidos entre 15 e 90 dias" >
<f:validateLongRange minimum="15" maximum="90" />
</h:inputText>
<br/>
<h:outputText value="Nova chave gerada:" />
<br/>
<h:inputText value="#{MyKeyManagerBean.theNewKey}"
readonly="true"
size="30"/>
<br/>
<br/>
<a4j:commandButton action="#{MyKeyManagerBean.renovarChave}" value="Atualizar Chave" />
</rich:panel>
</a4j:form>
Alguem tem outra ideia de como fazer isso ?
Outra dúvida, estou gerando um throw porque não posso permitir que o resto do código seja executado.
Tambem pensei em fazer o tratamento da exception dentro do meu try/catch, mas como retornar a mensagem no <rick:messages/> de maneira amigavel para o JSF mostrar para o usuário ?
Aguardando sugestões…
T+