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

