Boa noite galera
Estou com uma dúvida
Eu vi o conceito de validação em JSF, para valores null, numeros negativos e tals.
Mas nenhuma validação pra regra de negócio, por exemplo, verificar se um nome já exista no banco caso ele exista não pode gravar.
Por exemplo eu tenho o meu BusinessService
public void verificaNomeExistente(){
}
Quando eu vou cadastrar eu tenho que validar se o nome já existe.
Como eu conseguiria tal funcionalidade?
Att.
Ou você faz a verificação trazendo a lista com todos os nomes e mantendo-a viva na sessão ou você faz um select passando como parâmetro o nome e, caso haja retorno, lance o erro.
Podem existir pessoas com o mesmo nome, o que não pode acontecer é existirem pessoas com o mesmo cpf ou rg, faz um unique no banco, na hora de salvar se der
exception você escreve uma mensagem para o usuário,
http://wiki.apache.org/myfaces/Displaying_Errors/Infos/Warnings_in_JSF_Pages você vai usar a tag h:message ou h:messages do jsf.
Na minha opinião, esse tipo de validação é específico da sua aplicação e não do framework utilizado. Se você já possui uma camada de serviços, faça essa validação nela.
Imagine a seguinte situação:
Você tem uma aplicação web realizando essa validação via javascript ou no Controller/Managed Bean.
Agora o cliente pede que vc faça uma versão desktop dessa aplicação. Nesse caso, vc teria que reescrever essa regra de validação.
Se a validação for feita na camada de serviços, servirá tanto para aplicações web, desktop, webservices, etc.
[quote=finotti]Na minha opinião, esse tipo de validação é específico da sua aplicação e não do framework utilizado. Se você já possui uma camada de serviços, faça essa validação nela.
[/quote]
Isso mesmo.
Opa
Valew pelas respostas
Mais no caso eu já tenho a validação no meu BS, ele já lança uma exceção.
Mais no caso, eu gostaria de saber como eu faço pra mostrar uma mensagem no formulário, nome já existente, acho que por falta de conhecimento me expressei mal.
Eu tenho o método, que lança a exceção e eu gostaria de mostrar uma mensagem no formulário caso essa exceção seje lançada.
No método que lança a exceção você precisa colocar, no catch, um return que sinalize o erro à classe que o invoca.
Sim, mais quando essa exceção é lançada, o formulario desaparece q aparece apenas a exception.
Eu preciso que apareça no formulário avisando que o nome já existe.
Me manda um mp com seu email que te mando uma apostila.
Uso uma classe “FacesUtil” que tem métodos para exibir mensagens.
public static void exibirMensagemErro(String mensagem) {
exibirMensagem(FacesMessage.SEVERITY_ERROR, mensagem);
}
private static void exibirMensagem(FacesMessage.Severity severity, String mensagem) {
FacesMessage facesMessage = new FacesMessage(severity, "", mensagem);
FacesContext.getCurrentInstance().addMessage(null, facesMessage);
}
No seu controller
if (naoEhValido()) {
FacesUtil.exibirMensagemErro("Ja existe um usuario cadastrado com esse nome");
}
Eu tenho que colocar alguma anotação nessa classe FacesUtils?
Não precisa.
Na página vc tem que colocar a tag < h:messages > para exibição das msgs.
Obs: no link da minha assinatura tem um exemplo utilizando a classe FacesUtil
Opa, funcionou direitinho
VAlew, muito obrigado a todos.
Até +.