JSF - Ler a exception e mostrar um erro, como? Erros personalizados, como?

Ola pessoal
sou leigo em jsf!

eu tenho a seguinte duvida

1)como eu faco para pegar a Exception da classe e de acordo com ela, mostrar um mensagem pro usuario

tenho a seguinte classe de erros

package br.com.krusst.precadastro.util;

public class KrusstException extends Exception{
	
	public KrusstException(String mensagem, Exception e){
		super(mensagem, e);
	}
	
	public KrusstException(String mensagem){
		super(mensagem);
	}

}

e tenho esse exemplo de codigo

	public void setNome(String nome) throws KrusstException {
		if (nome.length() < 3){
			throw new KrusstException("mais que 3");
		}
		this.nome = nome;
	}

como eu faria pra mostrar no front-end a mensagem “mais que 3”?
ou pegar a Exception, ler , e mostrar uma outra msg
nao sei qual dos 2 é o mais certo, ou se os 2 estao errados, por isso a pergunta

2)como eu crio mensagens, validadores pra usar no jsf??
estou usando os validadores do jsf, porem, vou precisar criar alguns expecificos

abs

t+

Olá Krusst,

Não sei se é isso que você quer saber, mas oque eu fiz aqui no meu projeto ficaria assim no seu:

package br.com.krusst.precadastro.util;

public class KrusstException extends Exception{

	private static final long serialVersionUID = 392076463689226297L;
	
	private String message;
	private String field;

	
	public KrusstException(){
		super();
	}
	
	public KrusstException(String field, String message){
		this.message = message;
		this.field = field;
	}

	
	public String getMessage() {
		return message;
	}

	public String getField() {
		return field;
	}

}

E no seu código:

public void setNome(String nome) throws KrusstException {
	if (nome.length() &lt; 3){
		throw new KrusstException(&quot;formCadastro:nome&quot;,&quot;mais que 3&quot;);
	}
	this.nome = nome;
}

Onde ‘formCadastro’ é o id do seu form e o ‘nome’ é o id da h:message do campo em questão (<h:message for=“nome” style=“color: red” />)
Você pode também cadastrar mensagens no banco e chamá-las, desta forma facilita seu trabalho, não precisando escrevê-las cada vez que for preciso e mantendo assim um “padrão”.

Não sei se isto é correto, espero que os amigos do GUJ me corrijam, pois também estou iniciando no mundo Java, JSF… :oops:
Foi esta a solução que encontrei.

Espero ter feito alguma idéia aparecer por ai… :)hehe

Você pode criar a mensagem no java e mostrar na tela em um componente qualquer:

Ex:

<h:outputText id="mensagem" value="#{bean.mensagem}" />

cris
entendi o seu codigo
so nao entendi o pq dessa parte

private static final long serialVersionUID = 392076463689226297L;

pq vc cria essa variavel?
qual a finalidade?

sobre o acesso ao banco, acho que fica mais “leve” se criar um “classe” Enum

oq vc acha?

sobre essa parte

1. public void setNome(String nome) throws KrusstException { 2. if (nome.length() < 3){ 3. throw new KrusstException("formCadastro:nome","mais que 3"); 4. } 5. this.nome = nome; 6. }

um curiosidade
ele é especifico da web?

como vc passa “formCadastro:nome” ele so iria funcinar na parte web certo?

nesse caso eu preferia passar apenas o “mas que 3” como “Campo NOME precisa mais que 3 caracteres”, pois assim ele fica mais generico, assim nao especifico o campo que tem erro, e acho que isso da pra se detectar no front-end, ou nao?

aqui usei uma validacao “boba”, pois o a que realmente tenho que usar, são complexas e mais de 1.

maurenginaldo
Teria um exemplo um pouco mais detalhado?

obrigado a todos

abs

Olá Krusst,

Sobre a parte do private static final long serialVersionUID = 392076463689226297L;

Para explicar melhor, tomei a liberdade de usar alguas palavras do Guilherme Silveira,
que deu aqui uma explicação bem simples de entender sobre isso, espero que não se importe Guilherme… :slight_smile:

[quote] Guilherme Silveira:

Toda classe serializavel possui um serialVersionUID. Duas opcoes:

  • a virtual machine gera um para voce
  • voce seta o seu (atraves do serialVersionUID)

se voce quer ter controle da serializacao e se preocupa com controle de versoes de suas classes serializaveis tera que entender direito como ele funciona, porque e correr atras de manter suas versoes da mesma classe compativeis (ou nao)

se voce nao quer ter controle de serializacao simplesmente adiciona um supresswarnings (pois o eclipse te pentelha com o warning)
[/quote]

Entendeu? Existem tópicos explicando sobre serialVersionUID aqui no forum. :wink:

Não sei se utilizar Enum’s seria a maneira mais correta, não vi exemplos de tratamento de erros utilizando Enum ainda… se alguem aqui do forum quizer compartilhar alguma experiencia, dar alguma opinião, sinta-se a vontade! :smiley:

[quote] Krusst:

um curiosidade
ele é especifico da web?

como vc passa “formCadastro:nome” ele so iria funcinar na parte web certo?
[/quote]

Olha eu nunca programei pra desktop, mas acredito que nao, porque a primeira string é referente ao componente em que deve aparecer o erro,
e o segundo é referente a mensagem de erro que deve aparecer junto ao componente, seja ele web/desktop/movel
*Me corrijam se estiver errada pessoal… :oops:

Se você quer fazer uma coisa mais genérica, você pode criar um campo de comum acesso como um <h:messages id=“message” style=“color: red”/> no topo de sua página ou onde bem entender, e ai passar uma mensagem referente a qualquer coisa da tela em questão. :wink: