No meu managedbean, eu faço a comunicação entre os facelets e os modelos. Então vem a dúvida, de qual melhor caminho a seguir. Veja abaixo o ManagedBean.
O que eu quero é criar um método que traga todas as escolas, dentro de uma condição do meu select. Esse select me trará o nome da escola e a sua direção, mas no meu XHTML eu coloco apenas o nome das escolas e em outra posição a direção da mesma. Então eu criei uma classe chamada EscolaImp. Conforme abaixo:
Ai eu pergunto. O método para trazer as escolas, deve estar implementado em EscolaImp, certo? O que eu coloco no meu ManagedBean? Só a chamada? Extender a classe EscolaImp e dar um new nela e chamar o método em questão ou não é bem assim?
O fato é que eu não consigo ntrazer escola nenhuma no meu XHTML. Lá no outputtext value = "#{MostraEsc.NomeMétodoTrazEscola}">; não vem nada nele. Entã, a questã é que falta também a conexão com o banco dados e nesses exemplos que passei não tem ele. Em que momento ou em em que classe eu faço a conexão? Na EscolaDaoImp? Ou como fazer. Eu tenho muita dúvida nesses passos. Preciso dar esse resultado até amanhã, ou seja, fazer listar as escolas no meu XHTML e fechar esse ciclo. Aí bate o desespero. Fiquei ontem todo domingo para resolver isso. Li muito, mas agora preciso por em prática e falta a mim alguns conceitos. Talvez eu não esteja conseguindo passar a minha dúvida, acho que esse é o problema. Não uso SPRING não, acho que vai complicar mais a minha dúvida.
P
pjava
Este é o select que deve trazer as escolas do professor logado.
select distinct
p.nome as "Professor",p.sobrenome as "SobreNome",e.nome as "Escola",m.situacao as "Situação"
from
pessoa p inner join professor f on (p.idpessoa = f.idpessoa)
inner join matricula m on (m.idprofessor = f.idprofessor)
inner join escola e on (e.idescola = m.idescola)
where m.situacao = 'A'
Onde eu coloco ele para listar as escolas?
caputojf1
Cara aí depende…
Que tipo de conexão você vai fazer…JDBC, vai utilizar Hibernate, Hibernate + JPA…
Você tem que criar um método que vai retornar o seu Objeto “Escola” ou uma lista de Escola(List).
Esse método vai ficar na sua impl.
P
pjava
Uso Hibernate/JPA. O meu método é mais ou menos esse, mas está dando erro no Return, pois ele tá pedindo para fazer um cast no Add cast to ‘query’
public List<Escola> findAll() {
Query query = (Query) em.createQuery("select distinct p.nome ,p.sobrenome , " +
"e.nome as , m.situacao " +
"from " +
"pessoa p inner join professor f on (p.idpessoa = f.idpessoa) " +
"inner join matricula m on (m.idprofessor = f.idprofessor) " +
"inner join escola e on (e.idescola = m.idescola)" +
"where m.situacao = 'A'");
return query.getResultList();
}
R
raf4ever
Pelo contrário,usando Spring iria facilitar tua vida um bocado.
Recomendo que mais pra frente vc dê uma olhada.
R
raf4ever
pjava:
Uso Hibernate/JPA. O meu método é mais ou menos esse, mas está dando erro no Return, pois ele tá pedindo para fazer um cast no Add cast to ‘query’
public List<Escola> findAll() {
Query query = (Query) em.createQuery("select distinct p.nome ,p.sobrenome , " +
"e.nome as , m.situacao " +
"from " +
"pessoa p inner join professor f on (p.idpessoa = f.idpessoa) " +
"inner join matricula m on (m.idprofessor = f.idprofessor) " +
"inner join escola e on (e.idescola = m.idescola)" +
"where m.situacao = 'A'");
return query.getResultList();
}
tenta dar um (List<Escola> ) query.getResultList();
caputojf1
Como está o import da sua Query??
importjavax.persistence.Query;
Outra coisa…
return(List<Escola>)query.getResultList();
caputojf1
e uma dica…
no seu atributo em…
não pegue direto o atributo da classe.
Implemente esse método e utilize para criar a query
protectedEntityManagergetEntityManager(){
if(this.entityManager==null)thrownewIllegalStateException("Erro");returnthis.entityManager;}
publicList<Escola>findAll(){Queryquery=getEntityManager().createQuery("select distinct p.nome ,p.sobrenome , "+"e.nome as , m.situacao "+"from "+"pessoa p inner join professor f on (p.idpessoa = f.idpessoa) "+"inner join matricula m on (m.idprofessor = f.idprofessor) "+"inner join escola e on (e.idescola = m.idescola)"+"where m.situacao = 'A'"); return(List<Escola>)query.getResultList(); }
P
pjava
Não funcionou. Continua com o erro. Ele pede o cast de qualquer forma. Será os imports?
Cara, fica dando erro no entityManager. Coloquei com o ‘E’ maiúsculo e continua dando o mesmo erro, que não é possível resolver entityManager. Aí ele pede para criar uma constante e se eu crio, dá pau no query. Tá uma zona e ainda não consegui listar nada na minha página.
P
pjava
Ficou assim meu managedBean
@ManagedBean(value="MostraEsc")@SessionScopedpublicclassMostraEscolaAtiva{privatestaticfinalintList=0;privatestaticfinalintEscola=0;privateDataModellistaEscola;privateEntityManagerem;publicvoidhandleToggle(ToggleEventevent){FacesMessagemsg=newFacesMessage(FacesMessage.SEVERITY_INFO,"Fieldset Toggled","Visibility:"+event.getVisibility());FacesContext.getCurrentInstance().addMessage(null,msg);}publicvoidsetListaEscola(DataModellistaEscola){this.listaEscola=listaEscola;}publicDataModelgetListaEscola(){List<Escola>lista=newEscolaDaoImp().list();listaEscola=newListDataModel(lista);returnlistaEscola;}publicEntityManagergetEm(){returnem;}publicvoidsetEm(EntityManagerem){this.em=em;}publicstaticintgetList(){returnList;}protectedEntityManagergetEntityManager(){if(this.em==null)thrownewIllegalStateException("Erro");returnthis.em;}@PersistenceContextpublicvoidsetEntityManager(EntityManagerem){this.em=em;}publicList<Escola>findAll(){Queryquery=getEntityManager().createQuery("select distinct e.nome "+"from "+"pessoa p inner join professor f on (p.idpessoa = f.idpessoa) "+"inner join matricula m on (m.idprofessor = f.idprofessor) "+"inner join escola e on (e.idescola = m.idescola)"+"where m.situacao = 'A'");return(List<Escola>)query.getResultList();}}
É isso mesmo? Eu troquei o entityManager para[color=red] em[/color], pois esse é o atributo. Eu ainda não entendi o que tenho que fazer agora startar o PostgreSql e listar. Para listar é somente isso:
value = #{MostraEsc.findAll}; É só isso que eu coloco nop meu XHTML? Pq isso eu fiz e nada aconteceu, acho que tem problema ainda no banco para startar ele pelo java e etc..
P
pjava
a opção de fazê-lo, como por exemplo o web.xml, hibernate.cfg.xml e etc… Não me aparece a opção Persistence.xml. Se for do zero como faço e onde coloco, se no WebContent, src e etc…?
caputojf1
Como assim erro para startar o PostGree??
Você está usando JPA, certo?
Onde está seu arquivo de Persistence.xml?
Se ele estiver configurado corretamente, quando você chamar sua impl ele já faz a conexão com o banco.
no xhtml , vc deve chamar seu #{managedBean.metodoQueRetornaSuaLista}
P
pjava
Onde se coloca o Persistence.xml? Na pasta WebContente ou na pasta src ou Web-Inf?
caputojf1
No meu projeto eu coloquei dentro de META-INF
P
pjava
Criei esse arquivo Persistence.xml e tá dando erro. Dá erro na primeira linha, do tipo:
The processing instruction target matching"[xX][mM][lL]" is not allowed