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.
Escola escola;
EscolaDaoImp edi = new EscolaDaoImp();
public void handleToggle(ToggleEvent event) {
FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Fieldset Toggled", "Visibility:" + event.getVisibility());
FacesContext.getCurrentInstance().addMessage(null, msg);
}
}[/code]
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:
[code]public class EscolaDaoImp implements EscolaDAO{
@Override
public Class<Escola> getEntityType() {
return Escola.class;
}
}[/code]
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?
@ManagedBean(value="MostraEsc")
@SessionScoped
public class MostraEscolaAtiva {
Escola escola;
@Resource
EscolaDao dao;
public void buscarEscolas(){
escolas = dao.buscarEscolas();
}
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.
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?
[quote=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();
}[/quote]
tenta dar um (List<Escola> ) query.getResultList();
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.
private static final int List = 0;
private static final int Escola = 0;
private DataModel listaEscola;
private EntityManager em;
public void handleToggle(ToggleEvent event) {
FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Fieldset Toggled", "Visibility:" + event.getVisibility());
FacesContext.getCurrentInstance().addMessage(null, msg);
}
public void setListaEscola(DataModel listaEscola) {
this.listaEscola = listaEscola;
}
public DataModel getListaEscola(){
List<Escola> lista = new EscolaDaoImp().list();
listaEscola = new ListDataModel(lista);
return listaEscola;
}
public EntityManager getEm() {
return em;
}
public void setEm(EntityManager em) {
this.em = em;
}
public static int getList() {
return List;
}
protected EntityManager getEntityManager()
{
if (this.em == null)
throw new IllegalStateException(“Erro”);
return this.em;
}
@PersistenceContext
public void setEntityManager(EntityManager em) {
this.em = em;
}
public List<Escola> findAll() {
Query query = 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();
}
}[/code]
É 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…
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…?
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