Ajuda - Criteria com Eclipselink, JSF

4 respostas
clebercatao

Olá! Há muito tempo não venho por aqui e já peço desculpas pelo incomodo.

Estou fazendo um sistema relativamente pequeno mas cheios de detalhes, que o deixam grande.
Baseia-se em um cadastro de bandas onde um usuário inicial se inscreve:

-Classe usuario
–id
–login
–senha
–email
–administrador

Este usuário pode cadastrar uma banda:

-Classe banda
–id
–nome
–idusuario
–dataformacao
–genero
–lista de agenda
–acessos

Esta banda tem integrantes:

-Classe Integrante
–id
–nome
– funcao
–email
–dataingresso
–datanascimento

A banda também possui um gênero onde seu código na mesma tabela referênciado pelo id:

-Classe Genero
–id
–descrição

e o usuário possui um atributo booleano que categoriza como administrador ou não. Tenho 2 problemas!

Preciso criar uma pesquisa do tipo Criteria para listar a agenda completa da banda:

public List<Band> findCriteriaBandByUser(User user) {

        crit = em.getCriteriaBuilder();
        CriteriaQuery<Band> query = crit.createQuery(Band.class);
        Root<Band> band= query.from(Band.class);

        query.where(crit.equal(Band.get("usuario"),user.id ));
        band= em.createQuery(query).getResultList();
        
        result bands;
}

Mas não sei exatamente se isto está retornando a banda pelo código do usuario. Infelizmente não tenho como testar isto em casa. Triste.
Também tenho dúvidas com relação a como devo criar os beans. Sempre que tento executar o projeto, recebo um erro dizendo que o construtor do userBean não é válido mesmo não tendo construtor, se crio construtor diz que o método construtor possui parametros não publicos(não há parametros no construtor).

Não sei mais o que fazer.

Meu UserBean:

package managedbeans;

import dao.DaoGeneric;
import entities.User;
import interfaces.InterfaceBean;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.context.FacesContext;
import javax.persistence.PersistenceContext;
import javax.servlet.http.HttpSession;

@ManagedBean(name = "userBean")
public class UserBean implements InterfaceBean<User> {

    @PersistenceContext(name = "ProjetoFinalFinal")
    private User usuario, user;
    private DaoGeneric<User> dao;
    private List<User> usuarios;
    private FacesContext ctx = FacesContext.getCurrentInstance();
    private FacesContext context;
    private String sql, login, classe;
    private Class<User> clazz;
    private HttpSession session;
    
    public boolean verificaLogin(User usuario) {
        
        this.login = this.usuario.getLogin();
        this.classe = this.clazz.getSimpleName();
        this.sql = "select o from " + this.classe + " o where o.login = '" + this.login + "'";

        this.user = (User) dao.busca(this.sql);

        if (this.user.getLogin().equals(this.usuario.getLogin())
                && this.user.getSenha().equals(this.usuario.getSenha())) {

            return true;
        } else {
            return false;
        }
    }

   public List<User> getUsuarios() {
        
        usuarios = dao.listar();
        return usuarios;
        
    }

    public void setUsuarios(List<User> usuarios) {
        
        this.usuarios = usuarios;
        
    }

    public String getLogin() {
        
        return login;
        
    }

    public void setLogin(String login) {
        
        this.login = login;
        
        
    }

    public User getUsuario() {
        
        return usuario;
        
    }

    public void setUsuario(User usuario) {
        
        this.usuario = usuario;
        
    }

    public User buscar(long id) {
        
        usuario = dao.pesquisar(id);

        return usuario;
    }

   @Override
    public String novo() {
        
        this.usuario = new User();
        return "";
        
    }

    @Override
    public String enviar() {
        
        boolean erro = false;

        if (usuario.getCategoria().equals(null) || usuario.getEmail().isEmpty()
                || usuario.getLogin().isEmpty() || usuario.getSenha().isEmpty()) {

            ctx.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,
                    "Preencha todos os campos.", ""));
            erro = true;

        } else {
            dao.gravar(usuario);
            context.addMessage(null, new FacesMessage("Salvo com sussesso."));
            novo();
        }

        return erro ? "" : "";
    }

    @Override
    public String editar() {
        
        dao.alterar(usuario);
        return "";

    }

    @Override
    public String deletar() {

        dao.excluir(usuario);
        ctx.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,
                "Usuário excluído!", ""));
        return "";

    }

    @Override
    public List<User> getLista() {

        this.usuarios = dao.listar();
        return usuarios;

    }
}

Meu bean tá uma zona, mas não entendo o motivo do erro!

Será que alguém pode me ajudar?

4 Respostas

Hebert_Coelho

Talvez o código estar bagunçado já está te complicando.

Ao invés de usar Criteria, por que você não faz uma consulta normal mesmo?

Utilizando Criteria?

clebercatao

Olá, Hebert!
Primeiro quero parabenizar pela página, sempre que preciso acho algo de muito útil e que me ajuda lá.
Estou usando Criteria porque é uma necessidade, neste caso exclusivo, de que esta consulta seja realizada por este tipo de consulta.

Apesar de o código estar bem complicado, a pesquisa é realizada por uma classe exclusiva que retorna essa consulta.

Tenho um problema grave com aquele bean. Sempre me retorna essa mensagem e não consigo corrigir. Crio outros erros, mas não consigo resolver o problema!

com.sun.faces.mgbean.ManagedBeanCreationException: Não é possível criar instância para·a classe: managedbeans.BandaBean.

at com.sun.faces.mgbean.BeanBuilder.newBeanInstance(BeanBuilder.java:193)

at com.sun.faces.mgbean.BeanBuilder.build(BeanBuilder.java:102)

at com.sun.faces.mgbean.BeanManager.createAndPush(BeanManager.java:409)

at com.sun.faces.mgbean.BeanManager.create(BeanManager.java:269)

at com.sun.faces.el.ManagedBeanELResolver.resolveBean(ManagedBeanELResolver.java:244)

at com.sun.faces.el.ManagedBeanELResolver.getValue(ManagedBeanELResolver.java:116)

at com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176)

at com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203)

at org.apache.el.parser.AstIdentifier.getValue(AstIdentifier.java:72)

at org.apache.el.parser.AstValue.getValue(AstValue.java:147)

at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:189)

at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109)

at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:194)

at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:182)

at javax.faces.component.UIData.getValue(UIData.java:731)

at javax.faces.component.UIData.getDataModel(UIData.java:1798)

at javax.faces.component.UIData.getRowCount(UIData.java:356)

at org.primefaces.component.carousel.CarouselRenderer.encodeHeader(CarouselRenderer.java:151)

at org.primefaces.component.carousel.CarouselRenderer.encodeMarkup(CarouselRenderer.java:89)

at org.primefaces.component.carousel.CarouselRenderer.encodeEnd(CarouselRenderer.java:49)

at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875)

at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1763)

at javax.faces.render.Renderer.encodeChildren(Renderer.java:168)

at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:845)

at org.primefaces.renderkit.CoreRenderer.renderChild(CoreRenderer.java:57)

at org.primefaces.renderkit.CoreRenderer.renderChildren(CoreRenderer.java:45)

at org.primefaces.component.layout.LayoutUnitRenderer.encodeEnd(LayoutUnitRenderer.java:51)

at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875)

at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1763)

at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1759)

at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1759)

at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1759)

at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:401)

at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131)

at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121)

at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)

at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)

at javax.faces.webapp.FacesServlet.service(FacesServlet.java:410)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)

at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)

at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)

at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)

at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)

at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)

at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)

at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)

at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)

at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:987)

at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:579)

at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:307)

at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)

at java.lang.Thread.run(Unknown Source)

Caused by: java.lang.NullPointerException

at managedbeans.BandaBean.(BandaBean.java:32)

at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)

at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)

at java.lang.reflect.Constructor.newInstance(Unknown Source)

at java.lang.Class.newInstance0(Unknown Source)

at java.lang.Class.newInstance(Unknown Source)

at com.sun.faces.mgbean.BeanBuilder.newBeanInstance(BeanBuilder.java:188)

O banco está rodando, já tentei criar e remover construtor no bean, etc.

clebercatao

Galera, resolvido o problema de instanciamento do bean!!

A classe que era manipulada possuía o nome user, que é palavra reservada do sql, e não permitia que fizesse uso dessa palavra no momento de utilizar o objeto. Vou ver se consigo fazer funcionar o Criteria e retorno.

clebercatao

Ainda com problemas! Aparentemente não está funcionando com os beans.

com.sun.faces.mgbean.ManagedBeanCreationException: Um erro ocorreu ao realizar a injeção de recurso no bean gerenciado usuarioBean

at com.sun.faces.mgbean.BeanBuilder.injectResources(BeanBuilder.java:211)

at com.sun.faces.mgbean.BeanBuilder.build(BeanBuilder.java:103)

at com.sun.faces.mgbean.BeanManager.createAndPush(BeanManager.java:409)

at com.sun.faces.mgbean.BeanManager.create(BeanManager.java:269)

at com.sun.faces.el.ManagedBeanELResolver.resolveBean(ManagedBeanELResolver.java:244)

at com.sun.faces.el.ManagedBeanELResolver.getValue(ManagedBeanELResolver.java:116)

at com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176)

at com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203)

at com.sun.el.parser.AstIdentifier.getValue(AstIdentifier.java:103)

at com.sun.el.parser.AstValue.getValue(AstValue.java:179)

at com.sun.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:224)

at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109)

at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:194)

at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:182)

at javax.faces.component.UIOutput.getValue(UIOutput.java:169)

at org.primefaces.util.ComponentUtils.getValueToRender(ComponentUtils.java:67)

at org.primefaces.component.inputtext.InputTextRenderer.encodeMarkup(InputTextRenderer.java:79)

at org.primefaces.component.inputtext.InputTextRenderer.encodeEnd(InputTextRenderer.java:50)

at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875)

at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:312)

at com.sun.faces.renderkit.html_basic.GridRenderer.renderRow(GridRenderer.java:185)

at com.sun.faces.renderkit.html_basic.GridRenderer.encodeChildren(GridRenderer.java:129)

at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:845)

at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1757)

at javax.faces.render.Renderer.encodeChildren(Renderer.java:168)

at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:845)

at org.primefaces.renderkit.CoreRenderer.renderChild(CoreRenderer.java:57)

at org.primefaces.renderkit.CoreRenderer.renderChildren(CoreRenderer.java:45)

at org.primefaces.component.layout.LayoutUnitRenderer.encodeEnd(LayoutUnitRenderer.java:51)

at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875)

at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1764)

at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1760)

at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1760)

at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1760)

at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:402)

at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131)

at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121)

at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)

at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)

at javax.faces.webapp.FacesServlet.service(FacesServlet.java:594)

at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1550)

at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281)

at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)

at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)

at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)

at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161)

at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:331)

at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231)

at com.sun.enterprise.v3.services.impl.ContainerMapper$AdapterCallable.call(ContainerMapper.java:317)

at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195)

at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:860)

at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:757)

at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1056)

at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:229)

at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)

at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)

at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)

at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)

at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)

at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)

at com.sun.grizzly.ContextTask.run(ContextTask.java:71)

at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)

at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)

at java.lang.Thread.run(Thread.java:722)

Caused by: com.sun.faces.spi.InjectionProviderException: com.sun.enterprise.container.common.spi.util.InjectionException: Exceção ao tentar injetar Env-Prop: ProjetoBandasFinal@Field-Injectable Resource. Class name = managedbeans.GeneroBean Field name=generoField-Injectable Resource. Class name = managedbeans.UsuarioBean Field name=usuarioField-Injectable Resource. Class name = managedbeans.MembroBean Field name=integranteField-Injectable Resource. Class name = managedbeans.CategoriaBean Field name=categoriaField-Injectable Resource. Class name = managedbeans.TablesBean Field name=bandasField-Injectable Resource. Class name = managedbeans.BandaBean Field name=[email removido]@@@ em class managedbeans.UsuarioBean: Can not set entities.Usuario field managedbeans.UsuarioBean.usuario to com.sun.enterprise.container.common.impl.EntityManagerWrapper

at org.glassfish.faces.integration.GlassFishInjectionProvider.inject(GlassFishInjectionProvider.java:194)

at com.sun.faces.mgbean.BeanBuilder.injectResources(BeanBuilder.java:205)

 63 more

Caused by: com.sun.enterprise.container.common.spi.util.InjectionException: Exceção ao tentar injetar Env-Prop: ProjetoBandasFinal@Field-Injectable Resource. Class name = managedbeans.GeneroBean Field name=generoField-Injectable Resource. Class name = managedbeans.UsuarioBean Field name=usuarioField-Injectable Resource. Class name = managedbeans.MembroBean Field name=integranteField-Injectable Resource. Class name = managedbeans.CategoriaBean Field name=categoriaField-Injectable Resource. Class name = managedbeans.TablesBean Field name=bandasField-Injectable Resource. Class name = managedbeans.BandaBean Field name=[email removido]@@@ em class managedbeans.UsuarioBean: Can not set entities.Usuario field managedbeans.UsuarioBean.usuario to com.sun.enterprise.container.common.impl.EntityManagerWrapper

at com.sun.enterprise.container.common.impl.util.InjectionManagerImpl._inject(InjectionManagerImpl.java:703)

at com.sun.enterprise.container.common.impl.util.InjectionManagerImpl.inject(InjectionManagerImpl.java:470)

at com.sun.enterprise.container.common.impl.util.InjectionManagerImpl.injectInstance(InjectionManagerImpl.java:171)

at org.glassfish.faces.integration.GlassFishInjectionProvider.inject(GlassFishInjectionProvider.java:184)

 64 more

Caused by: java.lang.IllegalArgumentException: Can not set entities.Usuario field managedbeans.UsuarioBean.usuario to com.sun.enterprise.container.common.impl.EntityManagerWrapper

at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:164)

at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:168)

at sun.reflect.UnsafeObjectFieldAccessorImpl.set(UnsafeObjectFieldAccessorImpl.java:81)

at java.lang.reflect.Field.set(Field.java:680)

at com.sun.enterprise.container.common.impl.util.InjectionManagerImpl._inject(InjectionManagerImpl.java:651)
Criado 16 de outubro de 2012
Ultima resposta 20 de out. de 2012
Respostas 4
Participantes 2