JavaEE aparecer erro na caixa de texto e não no Console

gostaria que o erro aparecesse assim na caixa, ao usuário clicar pesquisar. Erro se não escolher/digitar algum campo para busca:

E não no console:

Context Path:
/Loucademia

Servlet Path:
/pesquisaDeAluno.faces

Path Info:
null

Query String:
null

Stack Trace:

javax.servlet.ServletException: javax.ejb.EJBException: javax.validation.ValidationException: Pelo menos um critério de pesquisa deve ser informado!
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:683)
	at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:74)
	at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:129)
	at io.opentracing.contrib.jaxrs2.server.SpanFinishingFilter.doFilter(SpanFinishingFilter.java:55)
	at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
	at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
	at io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:84)
	at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62)
	at io.undertow.servlet.handlers.ServletChain$1.handleRequest(ServletChain.java:68)
	at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)
	at org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)
	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
	at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:132)
	at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57)
	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
	at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46)
	at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64)
	at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60)
	at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77)
	at io.undertow.security.handlers.NotificationReceiverHandler.handleRequest(NotificationReceiverHandler.java:50)
	at io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43)
	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
	at org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)
	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)

Método Pesquisar:

package br.com.softblue.loucademia.interfaces.aluno.web;


import java.io.Serializable;
import java.util.List;

import javax.ejb.EJB;
import javax.enterprise.context.SessionScoped;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.inject.Inject;
import javax.inject.Named;
import javax.validation.ValidationException;

import br.com.softblue.loucademia.application.service.AlunoService;
import br.com.softblue.loucademia.domain.aluno.Aluno;

@Named
@SessionScoped
public class PesquisaAlunoBean implements Serializable{

	@EJB
	private AlunoService alunoService;
	
	@Inject
	private FacesContext facesContext;
	
	private String matricula;
	
	private String nome;
	
	private Integer rg;
	
	private Integer telefone;
	
	private List<Aluno> alunos;
	
	public String pesquisar() {
		try {
			alunos = alunoService.listAlunos(matricula, nome, rg, telefone);
		} catch (ValidationException e) {
			facesContext.addMessage(null, new FacesMessage(e.getMessage()));
		}
		
		
		return null;
	}
	
	public String excluir(String matricula) {
		
		alunoService.delete(matricula);
		// Depois de excluir retorna a própria página
		return pesquisar();
	}
	
	

	public String getMatricula() {
		return matricula;
	}

	public void setMatricula(String matricula) {
		this.matricula = matricula;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public Integer getRg() {
		return rg;
	}

	public void setRg(Integer rg) {
		this.rg = rg;
	}

	public Integer getTelefone() {
		return telefone;
	}

	public void setTelefone(Integer telefone) {
		this.telefone = telefone;
	}

	public List<Aluno> getAlunos() {
		return alunos;
	}
	
	

}

Método LisAlunos:

package br.com.softblue.loucademia.domain.aluno;

import java.time.Year;
import java.util.List;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.TypedQuery;

import br.com.softblue.loucademia.application.utils.StringUtil;

@Stateless
public class AlunoRepository {

	@PersistenceContext
	private EntityManager em;
	
	// gravando aluno
	public void store(Aluno aluno) {
		em.persist(aluno);
	}
	
	
	public void update(Aluno aluno) {
		em.merge(aluno);
	}
	
	public Aluno findByMatricula(String matricula) {
		return em.find(Aluno.class, matricula);
	}
	
	public void delete(String matricula) {
		
		// Primeiro carrega o objeto p/ trabalhar com exclusao na JPA
		Aluno aluno = findByMatricula(matricula);
		
		if (aluno != null) {
			em.remove(aluno);
		}
	}
	
	
	public String getMaxMatriculaAno() {
		return em.createQuery("SELECT MAX(a.matricula) FROM Aluno a WHERE a.matricula LIKE :ano", String.class)
				.setParameter("ano", Year.now() + "%")
				.getSingleResult();
	}
	
	public List<Aluno> listAlunos(String matricula, String nome, Integer rg, Integer telefone){
		
		StringBuilder jpql = new StringBuilder("SELECT a FROM  Aluno a WHERE ");
		
		if(!StringUtil.isEmpty(matricula)) {
			jpql.append("a.matricula = :matricula AND ");
		}
		
		if(!StringUtil.isEmpty(nome)) {
			jpql.append("a.nome LIKE :nome AND ");
		}
		
		if(rg != null) {
			jpql.append("a.rg = :rg AND ");
		}
		
		if(telefone != null) {
			jpql.append("(a.telefone.numeroCelular LIKE :celular  OR a.telefone.numeroFixo LIKE  :fixo ) AND ");
		}
		
		
		jpql.append("1 = 1");
		
		TypedQuery<Aluno> q = em.createQuery(jpql.toString(), Aluno.class);
		
		
		
		if(!StringUtil.isEmpty(matricula)) {
			q.setParameter("matricula", matricula);
		}
		
		if(!StringUtil.isEmpty(nome)) {
			q.setParameter("nome", "%" +nome+ "%" );
		}
		
		if(rg != null) {
			q.setParameter("rg", rg);
		}
		
		if(telefone != null) {
			q.setParameter("celular",   telefone );
			q.setParameter("fixo",   telefone);
		}
		
		
		return q.getResultList();
		
	}
	
}

método listAlunos:

package br.com.softblue.loucademia.application.service;


import java.util.List;

import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.validation.ValidationException;

import br.com.softblue.loucademia.application.utils.StringUtil;
import br.com.softblue.loucademia.application.utils.Validation;
import br.com.softblue.loucademia.domain.aluno.Aluno;
import br.com.softblue.loucademia.domain.aluno.AlunoRepository;

// Classe a qual AlunoBean ira interagir
@Stateless
public class AlunoService {

	@EJB
	private AlunoRepository alunoRepository;
	
	public void createOrUpdate(Aluno aluno) {
		if (StringUtil.isEmpty(aluno.getMatricula())) {
			create(aluno);
		}else {
			update(aluno);
		}
		
	}
	
	// Create cria uma matricula nova
	private void create(Aluno aluno) {
		// primeiro chama método abaixo
		Validation.assertNotEmpty(aluno);
		
		String maxMatricula = alunoRepository.getMaxMatriculaAno();
		
		aluno.gerarMatricula(maxMatricula);
		
		alunoRepository.store(aluno);
	}
	
	
    private void update(Aluno aluno) {
    	Validation.assertNotEmpty(aluno);
	
    	// Se faz atualização tem que existirumamatricula associada
    	Validation.assertNotEmpty(aluno.getMatricula());
	
    	alunoRepository.update(aluno);
	
	}
    
    public void delete(String matricula) {
    	alunoRepository.delete(matricula);
    }
    
    public Aluno findByMatricula(String matricula) {
    	return
    	alunoRepository.findByMatricula(matricula);
    }
    
    public List<Aluno> listAlunos(String matricula, String nome, Integer rg, Integer telefone){
    	    	
		/*
    	Aluno aluno = alunoRepository.findByMatricula(matricula);
    	
		List<Aluno> alunos = new ArrayList<Aluno>();
		alunos.add(aluno);
		return alunos;
    	*/
    	
    	if(StringUtil.isEmpty(matricula) && StringUtil.isEmpty(nome) && rg==null && telefone==null) {
    		throw new ValidationException("Pelo menos um critério de pesquisa deve ser informado!");
    	}             
    	
		return alunoRepository.listAlunos(matricula, nome, rg, telefone);
    }

	
}

Na Softblue disse que era só colocar esta tag para aceitar e iria na caixa , mas não vai:

package br.com.softblue.loucademia.application.utils;

import javax.ejb.ApplicationException;

@ApplicationException
public class ValidationException extends RuntimeException {

	public ValidationException() {
		
	}

	public ValidationException(String message) {
		super(message);
		
	}

	public ValidationException(Throwable cause) {
		super(cause);
		
	}

	public ValidationException(String message, Throwable cause) {
		super(message, cause);
		
	}

	public ValidationException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
		super(message, cause, enableSuppression, writableStackTrace);
		
	}

}

Mandar pesquisar direto sem entrar com valores nos campos

Marcel,

Você quer que apareça uma mensagem quando ocorre um erro?
Por que se for isso, ele ja deveria estar sendo exibido o erro, se não for poderia explicar melhor o que você quer.

1 curtida

Sim, gostaria que exibisse, estou fazendo algum detalhe errado e não capitei onde
Tentei em outro navegador e deu o mesmo erro

, obrigado

Apenas importação errada.

em AlunoService e AlunoRepository
import br.com.softblue.loucademia.application.utils.ValidationException;