Caros,
Tenho um service e gostaria de adicionar uma mensagem de erro personalizada na visão, mas não estou conseguindo!
No caso é um service que está cadastrando novos usuários e caso o login já esteja em uso ele deve rejeitar o cadastro e exibir a mensagem apra o usuário.
Como faço isso? Qual a melhor abordagem?
Do jeito abaixo ele até valida aquilo que está anotado com o Validator da JSR 303, mas essa mensagem que eu adiciono não é exibida!
Não colei a view mas utilizo um h:messages!
Levem em consideração que o repositório esteja funcionando 100%!
Vejam:
[code]
//No UsuarioService:
public Usuario salvarOuAtualizar(final Usuario usuario) {
Validator validador = new ValidadorUtil().getValidator();
Set<ConstraintViolation><Usuario>> erros = validador.validate(usuario);
// TODO: validar e lançar exceção caso o usuário esteja num estado
// inválido!
if (erros.size() != 0) {
throw new UniblueException(Mensagens.ENTIDADE_INVALIDA ,erros);
}
if (usuario.getId() == null) {
// TODO:Verificar se o login solicitado já está em uso!
if (REPOSITORIO.loginEmUso(usuario)) {
throw new UniblueException(Mensagens.LOGIN_EM_USO);
}
}
return REPOSITORIO.salvarOuAtualizar(usuario);
}[/code]
//No bean:
@ViewScoped
@ManagedBean
public class UsuarioBean implements Serializable {
private static final long serialVersionUID = 1L;
private Usuario usuario = new Usuario();
private Collection<Usuario> usuarios;
private UIComponent component;
public void grava() {
try {
UsuarioService.INSTANCIA.salvarOuAtualizar(usuario);
this.usuario = new Usuario();
this.usuarios = UsuarioService.INSTANCIA.buscarTodos();
} catch (UniblueException e) {
e.printStackTrace();
FacesContext contexto = FacesContext.getCurrentInstance();
if (e.getErros() != null) {
for (ConstraintViolation<Usuario> erro : e.getErros()) {
contexto.addMessage(component.getClientId(),
new FacesMessage(erro.getMessage()));
}
}
}
}
public void remove(Usuario usuario) {
UsuarioService.INSTANCIA.excluir(usuario);
this.usuarios = UsuarioService.INSTANCIA.buscarTodos();
}
public Usuario getUsuario() {
return usuario;
}
public void setUsuario(Usuario usuario) {
this.usuario = usuario;
}
public Collection<Usuario> getUsuarios() {
if (usuarios == null) {
usuarios = UsuarioService.INSTANCIA.buscarTodos();
}
return usuarios;
}
public UIComponent getComponent() {
return component;
}
public void setComponent(UIComponent component) {
this.component = component;
}
}
Como insiro uma mensagem dentre as que serão exibidas na view no componente h:messages???