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

4 respostas Resolvido
javaweb
M

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);
		
	}

}

4 Respostas

M

Mandar pesquisar direto sem entrar com valores nos campos

M

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.

M

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

, obrigado

M
Solucao aceita

Apenas importação errada.

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

Criado 30 de janeiro de 2019
Ultima resposta 3 de fev. de 2019
Respostas 4
Participantes 2