Fórum Não consigo carregar os dados de um MB ou DAO para a tela em JSF #9052
02/09/2009
0
Eu tenho minha entidade:
@Entity
@Table(name = "[DADOS DO SERVIDOR]")
public class Pessoa implements java.io.Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name = "Ds_Login")
private String login;
@Column(name = "MATRÍCULA")
private String matricula;
@Column(name = "NOME")
private String nome;
@Column(name = "[UNIDADE DE EXERCÍCIO]")
private String setor;
/**
* Construtor padrão
*/
public Pessoa() {
}
/**
* @param login
*/
public Pessoa(String login) {
this.login = login;
}
/**
* @return the nome
*/
public String getNome() {
return nome;
}
/**
* @param nome
* the nome to set
*/
public void setNome(String nome) {
this.nome = nome;
}
/**
* @param matricula
* the matricula to set
*/
public void setMatricula(String matricula) {
this.matricula = matricula;
}
/**
* @return the matricula
*/
public String getMatricula() {
return matricula;
}
/**
* @param login
* the login to set
*/
public void setLogin(String login) {
this.login = login;
}
/**
* @return the login
*/
public String getLogin() {
return login;
}
/**
* @param setor
* the setor to set
*/
public void setSetor(String setor) {
this.setor = setor;
}
/**
* @return the setor
*/
public String getSetor() {
return setor;
}
}
tenho meu dao
public class PessoaDAO {
public PessoaDAO() {
}
public Pessoa obterPessoa(String login) {
return JPAUtil.getInstance().getEntity(Pessoa.class,login);
}
}
e aqui tenho MB que é onde eu devo estar errando provavelmente. Isso é só a nível de teste. Pois o meu desejo é obter os dados do usuário a partir do usuário que estar logado.
public class PessoaMB implements java.io.Serializable {
private static final long serialVersionUID = 1L;
private final PessoaDAO dao = new PessoaDAO();
private Pessoa pessoa;
//String login = System.getProperty("user.name");
public PessoaMB() {
pessoa = dao.obterPessoa("anamel");
}
public void setPessoa(Pessoa pessoa) {
this.pessoa = pessoa;
}
public Pessoa getPessoa() {
pessoa = dao.obterPessoa("anamel");
return pessoa;
}
}
e aqui minha pagina de saida de dados:
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets">
<head></head>
<body>
<f:view>
<h:form>
<h:dataTable var="pessoa" value="#{pessoaMB.pessoa}">
<h:column>
<f:facet name="header">
<h:outputText value="nome" />
</f:facet>
<h:outputText value="#{pessoa.nome}" />
</h:column>
</h:dataTable>
</h:form>
</f:view>
</body>
</html>
Porém não retorna nada na página. E nem da erro.
Euclides Filizola
Curtir tópico
+ 0Posts
02/09/2009
Henrique Weissmann
bem: vamos lá. Primeiro pela pergunta mais tola ok?
Tem certeza de que existe uma pessoa cadastrada no seu sistema com o login "anamel"?
Dica: crie um teste unitário no seu sistema que faça a busca por este usuário antes de passá-lo para a sua página jsf. Assim esta parte do problema é descartada ok?
Agora, vamos para a segunda parte do problema: edite a sua página para que imprima alguma coisa independente de haver dados no managed bean ou não, algo como no exemplo abaixo:
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets">
<head></head>
<body>
<f:view><h:outputText value="Qualquer coisa"/>
<h:form>
<h:dataTable var="pessoa" value="#{pessoaMB.pessoa}">
<h:column>
<f:facet name="header">
<h:outputText value="nome" />
</f:facet>
<h:outputText value="#{pessoa.nome}" />
</h:column>
</h:dataTable>
</h:form>
</f:view>
</body>
</html>
Se este "qualquer coisa" não aparecer, neste caso é sinal de que a sua aplicação não está bem configurada, o que resultaria na não exibição do conteúdo da página.
Gostei + 0
02/09/2009
Euclides Filizola
public class Teste {
public Teste() {
}
/**
* @param args
*/
public static void main(String[] args) {
//String login = System.getProperty("user.name");
EntityManagerFactory emf = Persistence.createEntityManagerFactory("BDSERV");
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
Pessoa pessoa = em.find(Pessoa.class, "anamel");
em.getTransaction().commit();
System.out.println("Nome: "+pessoa.getNome());
System.out.println("Matricula: "+pessoa.getMatricula());
System.out.println("SETOR: "+pessoa.getSetor());
em.close();
emf.close();
}
}
E ela funciona perfeitamente, ou seja, com o meu usuario logado ela funciona e tudo, me traz os dados ( significa que minha configuração em relação a persistencia, acredito eu , que esteja funcionando).
Outra coisa, o banco o qual estou tentando acessar é sql Server, então não sei se tem um tratamento diferente. Enfim,
agora apareceu o seguinte erro:
log4j:WARN No appenders could be found for logger (org.hibernate.cfg.annotations.Version).
log4j:WARN Please initialize the log4j system properly.
Hibernate: select pessoa0_.Ds_Login as Ds1_0_0_, pessoa0_.MATRÍCULA as MATRÍCULA0_0_, pessoa0_.NOME as NOME0_0_, pessoa0_.[UNIDADE DE EXERCÍCIO] as UNIDADE4_0_0_ from [DADOS DO SERVIDOR] pessoa0_ where pessoa0_.Ds_Login=?
Hibernate: select pessoa0_.Ds_Login as Ds1_0_0_, pessoa0_.MATRÍCULA as MATRÍCULA0_0_, pessoa0_.NOME as NOME0_0_, pessoa0_.[UNIDADE DE EXERCÍCIO] as UNIDADE4_0_0_ from [DADOS DO SERVIDOR] pessoa0_ where pessoa0_.Ds_Login=?
02/09/2009 14:26:51 org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet Faces Servlet threw exception
java.lang.ClassNotFoundException: javax.servlet.jsp.jstl.sql.Result
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
at javax.faces.component.UIData.getDataModel(UIData.java:1140)
at javax.faces.component.UIData.setRowIndex(UIData.java:451)
at com.sun.faces.renderkit.html_basic.TableRenderer.encodeBegin(TableRenderer.java:77)
at javax.faces.component.UIComponentBase.encodeBegin(UIComponentBase.java:813)
at javax.faces.component.UIData.encodeBegin(UIData.java:967)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:928)
at javax.faces.render.Renderer.encodeChildren(Renderer.java:148)
at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:837)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:930)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:933)
at com.sun.facelets.FaceletViewHandler.renderView(FaceletViewHandler.java:578)
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:110)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:266)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:859)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:574)
at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1527)
at java.lang.Thread.run(Unknown Source)
Detalhe, essa sql aqui:
Hibernate: select pessoa0_.Ds_Login as Ds1_0_0_, pessoa0_.MATRÍCULA as MATRÍCULA0_0_, pessoa0_.NOME as NOME0_0_, pessoa0_.[UNIDADE DE EXERCÍCIO] as UNIDADE4_0_0_ from [DADOS DO SERVIDOR] pessoa0_ where pessoa0_.Ds_Login=?
se eu executar no banco, ela funciona beleza, desde que eu utilize aspas simples depois do = .
como exemplo:
select pessoa0_.Ds_Login as Ds1_0_0_, pessoa0_.MATRÍCULA as MATRÍCULA0_0_, pessoa0_.NOME as NOME0_0_, pessoa0_.[UNIDADE DE EXERCÍCIO] as UNIDADE4_0_0_ from [DADOS DO SERVIDOR] pessoa0_ where pessoa0_.Ds_Login= 'anamel'.
Gostei + 0
02/09/2009
Henrique Weissmann
Veja aqui o erro: java.lang.ClassNotFoundException: javax.servlet.jsp.jstl.sql.Result
No caso, o seu sistema ema lgum lugar utiliza as tags presentes no JSTL. Se não me engano, o nome do arquivo é jstl.jar ou standard.jar. Verifique se estes se encontram dentro do seu classpath ou entre as bibliotecas utilizadas pelo seu projeto (caso esteja usando uma IDE). Isto explica o porquê de nada estar sendo renderizado para você.
Para saber o nome do arquivo jar com maior precisão, recomendo o uso de ferramentas como o site JarFinder (www.jarfinder.com), aonde você digita o nome da classe e ele te retorna uma série de nomes de arquivos jar aonde o mesmo se encontra.
Gostei + 0
02/09/2009
Euclides Filizola
Gostei + 0
02/09/2009
Henrique Weissmann
a jstl está listada pelo que pude ver. Faça o seguinte: verifique se ela está sendo incluida no seu arquivo .war também. Caso não seja o caso, faça com que a mesma seja incluida.
Isto deverá solucionar o problema. Como seguro morreu de velho, sugiro novamente que você verifique no www.jarfinder.com se a classe pode estar em outro local também (nada impede que o seu jar contenha apenas as interfaces da biblioteca).
Gostei + 0
02/09/2009
Euclides Filizola
Gostei + 0
02/09/2009
Euclides Filizola
Gostei + 0
02/09/2009
Henrique Weissmann
não tenho certeza, porém uma causa comum consiste no fato do jar distribuido com a aplicação conter apenas as interfaces de referência, e não as classes já implementadas.
Sendo assim, quando vai ser criada uma nova instância da classe, a JVM encontra apenas a definição da interface, e não a implementação da mesma. Como consequência, obtem-se o erro de ClassNotFound.
Esta é uma das razões, outra pode ser também a presença da mesma classe em mais de um arquivo jar dentro do seu classpath. A JVM nestes casos não vai saber qual dos arquivos de classe deverá ser instanciado e, pior ainda neste caso, pode instanciar uma versão errada da mesma.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)