Note que o value do dataTable está chamando um método, com H:DATATABLE funcionou certinho, ele trouxe os registros, mas com o P ele da a seguinte exeption:
javax.faces.view.facelets.FaceletException: Error Parsing /livraria/frmListaProdutos.jspx: Error Traced[line: 31] O conteúdo dos elementos deve consistir em dados ou marcação do caractere correto.
com.sun.faces.facelets.compiler.SAXCompiler.doCompile(SAXCompiler.java:425)
com.sun.faces.facelets.compiler.SAXCompiler.doMetadataCompile(SAXCompiler.java:408)
com.sun.faces.facelets.compiler.Compiler.metadataCompile(Compiler.java:130)
com.sun.faces.facelets.impl.DefaultFaceletFactory.createMetadataFacelet(DefaultFaceletFactory.java:327)
com.sun.faces.facelets.impl.DefaultFaceletFactory.access$200(DefaultFaceletFactory.java:93)
com.sun.faces.facelets.impl.DefaultFaceletFactory$2.newInstance(DefaultFaceletFactory.java:166)
com.sun.faces.facelets.impl.DefaultFaceletFactory$2.newInstance(DefaultFaceletFactory.java:164)
com.sun.faces.facelets.impl.DefaultFaceletCache$2.newInstance(DefaultFaceletCache.java:94)
com.sun.faces.facelets.impl.DefaultFaceletCache$2.newInstance(DefaultFaceletCache.java:89)
com.sun.faces.util.ExpiringConcurrentCache$1.call(ExpiringConcurrentCache.java:99)
java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
java.util.concurrent.FutureTask.run(Unknown Source)
com.sun.faces.util.ExpiringConcurrentCache.get(ExpiringConcurrentCache.java:114)
com.sun.faces.facelets.impl.DefaultFaceletCache.getViewMetadataFacelet(DefaultFaceletCache.java:143)
com.sun.faces.facelets.impl.DefaultFaceletCache.getViewMetadataFacelet(DefaultFaceletCache.java:62)
com.sun.faces.facelets.impl.DefaultFaceletFactory.getMetadataFacelet(DefaultFaceletFactory.java:260)
com.sun.faces.facelets.impl.DefaultFaceletFactory.getMetadataFacelet(DefaultFaceletFactory.java:209)
com.sun.faces.application.view.ViewMetadataImpl.createMetadataView(ViewMetadataImpl.java:114)
com.sun.faces.lifecycle.RestoreViewPhase.execute(RestoreViewPhase.java:233)
com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:116)
com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)
org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:79)
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
javax.servlet.ServletException: Error Parsing /livraria/frmListaProdutos.jspx: Error Traced[line: 31] O conteúdo dos elementos deve consistir em dados ou marcação do caractere correto.
javax.faces.webapp.FacesServlet.service(FacesServlet.java:606)
org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:79)
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
root cause
javax.faces.view.facelets.FaceletException: Error Parsing /livraria/frmListaProdutos.jspx: Error Traced[line: 31] O conteúdo dos elementos deve consistir em dados ou marcação do caractere correto.
com.sun.faces.facelets.compiler.SAXCompiler.doCompile(SAXCompiler.java:417)
com.sun.faces.facelets.compiler.SAXCompiler.doMetadataCompile(SAXCompiler.java:400)
com.sun.faces.facelets.compiler.Compiler.metadataCompile(Compiler.java:130)
com.sun.faces.facelets.impl.DefaultFaceletFactory.createMetadataFacelet(DefaultFaceletFactory.java:327)
com.sun.faces.facelets.impl.DefaultFaceletFactory.access$200(DefaultFaceletFactory.java:93)
com.sun.faces.facelets.impl.DefaultFaceletFactory$2.newInstance(DefaultFaceletFactory.java:166)
com.sun.faces.facelets.impl.DefaultFaceletFactory$2.newInstance(DefaultFaceletFactory.java:164)
com.sun.faces.facelets.impl.DefaultFaceletCache$2.newInstance(DefaultFaceletCache.java:94)
com.sun.faces.facelets.impl.DefaultFaceletCache$2.newInstance(DefaultFaceletCache.java:89)
com.sun.faces.util.ExpiringConcurrentCache$1.call(ExpiringConcurrentCache.java:99)
java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
java.util.concurrent.FutureTask.run(FutureTask.java:166)
com.sun.faces.util.ExpiringConcurrentCache.get(ExpiringConcurrentCache.java:114)
com.sun.faces.facelets.impl.DefaultFaceletCache.getViewMetadataFacelet(DefaultFaceletCache.java:143)
com.sun.faces.facelets.impl.DefaultFaceletCache.getViewMetadataFacelet(DefaultFaceletCache.java:62)
com.sun.faces.facelets.impl.DefaultFaceletFactory.getMetadataFacelet(DefaultFaceletFactory.java:260)
com.sun.faces.facelets.impl.DefaultFaceletFactory.getMetadataFacelet(DefaultFaceletFactory.java:209)
com.sun.faces.application.view.ViewMetadataImpl.createMetadataView(ViewMetadataImpl.java:114)
com.sun.faces.lifecycle.RestoreViewPhase.execute(RestoreViewPhase.java:233)
com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:116)
com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)
org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:79)
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
javax.servlet.ServletException: Error Parsing /livraria/frmListaProdutos.jspx: Error Traced[line: 31] O conteúdo dos elementos deve consistir em dados ou marcação do caractere correto.
javax.faces.webapp.FacesServlet.service(FacesServlet.java:606)
org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:79)
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
root cause
javax.faces.view.facelets.FaceletException: Error Parsing /livraria/frmListaProdutos.jspx: Error Traced[line: 31] O conteúdo dos elementos deve consistir em dados ou marcação do caractere correto.
com.sun.faces.facelets.compiler.SAXCompiler.doCompile(SAXCompiler.java:417)
com.sun.faces.facelets.compiler.SAXCompiler.doMetadataCompile(SAXCompiler.java:400)
com.sun.faces.facelets.compiler.Compiler.metadataCompile(Compiler.java:130)
com.sun.faces.facelets.impl.DefaultFaceletFactory.createMetadataFacelet(DefaultFaceletFactory.java:327)
com.sun.faces.facelets.impl.DefaultFaceletFactory.access$200(DefaultFaceletFactory.java:93)
com.sun.faces.facelets.impl.DefaultFaceletFactory$2.newInstance(DefaultFaceletFactory.java:166)
com.sun.faces.facelets.impl.DefaultFaceletFactory$2.newInstance(DefaultFaceletFactory.java:164)
com.sun.faces.facelets.impl.DefaultFaceletCache$2.newInstance(DefaultFaceletCache.java:94)
com.sun.faces.facelets.impl.DefaultFaceletCache$2.newInstance(DefaultFaceletCache.java:89)
com.sun.faces.util.ExpiringConcurrentCache$1.call(ExpiringConcurrentCache.java:99)
java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
java.util.concurrent.FutureTask.run(FutureTask.java:166)
com.sun.faces.util.ExpiringConcurrentCache.get(ExpiringConcurrentCache.java:114)
com.sun.faces.facelets.impl.DefaultFaceletCache.getViewMetadataFacelet(DefaultFaceletCache.java:143)
com.sun.faces.facelets.impl.DefaultFaceletCache.getViewMetadataFacelet(DefaultFaceletCache.java:62)
com.sun.faces.facelets.impl.DefaultFaceletFactory.getMetadataFacelet(DefaultFaceletFactory.java:260)
com.sun.faces.facelets.impl.DefaultFaceletFactory.getMetadataFacelet(DefaultFaceletFactory.java:209)
com.sun.faces.application.view.ViewMetadataImpl.createMetadataView(ViewMetadataImpl.java:114)
com.sun.faces.lifecycle.RestoreViewPhase.execute(RestoreViewPhase.java:233)
com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:116)
com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)
org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:79)
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
com.sun.faces.context.FacesFileNotFoundException: /livraria/livraria/frmListaProdutos.jspx Not Found in ExternalContext as a Resource
com.sun.faces.facelets.impl.DefaultFaceletFactory.resolveURL(DefaultFaceletFactory.java:232)
com.sun.faces.facelets.impl.DefaultFaceletFactory.resolveURL(DefaultFaceletFactory.java:273)
com.sun.faces.facelets.impl.DefaultFaceletFactory.getMetadataFacelet(DefaultFaceletFactory.java:209)
com.sun.faces.application.view.ViewMetadataImpl.createMetadataView(ViewMetadataImpl.java:114)
com.sun.faces.lifecycle.RestoreViewPhase.execute(RestoreViewPhase.java:233)
com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:116)
com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)
org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:79)
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
To achando estranho a exception retornar algo relacionado ao FacesServlet, digo isso pois precisei adicionar o filter do do FileUpLoad para que funcione o Upload em outra tela, então segue abaixo o conteudo do web.xml
javax.servlet.ServletException: Error Parsing /livraria/frmListaProdutos.jspx: Error Traced[line: 31] O conteúdo dos elementos deve consistir em dados ou marcação do caractere correto.
javax.faces.webapp.FacesServlet.service(FacesServlet.java:606)
Estive dando uma conversa com um pessoal daqui da empresa e o que me falaram é o seguinte:
Desenvolvimento jsp /jsf o que é comum fazer é colocar atributos dentro do controlador e no get deste atributo o sistema irá popular o objeto e devolver a lista para a camada de visão. Com isso eu teria o seguinte cenário:
No controlador eu adicionaria um arraylist:
public ArrayList<Produto> arrProdutos = new ArrayList<Produto>();
E no método getArrProdutos() eu iria na persistencia pegar os dados.
O que vocês acham disso ?? È normal isso acontecer ?? Desculpem a ignorancia desenvolvo com flex e o flex acessa via AMF o método de forma direta no codigo action script.
Nunca popule uma lista direta pelo método get. Pois dependendo do seu scopo ele pode a cada requisição entrar neste método e popular novamente.
Uma forma seria é criar um método inicial e usar a anotação @PostConstruct para popular seus objetos.
import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
@ManagedBean(name="produtoControle")
@RequestScoped
public class ProdutoBean {
private List<Produto> lista;
public List<Produto> getLista() {
//aqui vc irá efetuar a busca no banco de dados e atribuir a variável lista criada acima.
return this.lista;
}
}
import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
@ManagedBean(name="produtoControle")
@RequestScoped
public class ProdutoBean {
private List<Produto> lista;
public List<Produto> getLista() {
//aqui vc irá efetuar a busca no banco de dados e atribuir a variável lista criada acima.
return this.lista;
}
}
depois basta subtituir a linha:
por:
[/quote]
Isso é errado, a cada requisição que tu fizer a este ManagedBean o método get vai ser chamado, sendo assim vai ir ao banco carregar novamente a lista.
Eu vi essa descrição no livro: Programação java para web,
como sou novato, gostaria que me informasse sobre essa correção pois estou fazendo assim:
public List<Categoria> getLista() {
if(this.lista == null){
CategoriaRN rn = new CategoriaRN();
this.lista = rn.listar(null);//com o parametro null, a lista carrega todos os registros
}
return this.lista;
}