Exibir ArrayList em página JSF index.xhtml
Possuo a classe seguinte:
E não estou conseguindo exibir o que foi adicionado ao ArrayList, na página principal em um dataTable.
Esse é o treco do dataTable:
alguém me ajuda?
public class ComentarioBean {
private int idCom;
private int idTemaCom;
private int idCodPartCom;
private String textoCom;
private int statusCom;
private List<ComentarioBean> lista = new ArrayList<ComentarioBean>();
public List<ComentarioBean> listar() {
return this.lista;
}
public String insereComentario() {
lista.add(this);
return "sucesso";
} <h:dataTable value="#{comentarioBean.lista}" var="com" rules="rows">
<f:facet name="caption">Comentários relativos aos temas desenvolvidos
</f:facet>
<f:facet name="header">Listagem dos comentários</f:facet>
<f:facet name="footer">Fim da listagem</f:facet>
<h:column>
<f:facet name="header">Cód. do Tema</f:facet>#{com.idTemaCom}
</h:column>
<h:column>
<f:facet name="header">Cód. do Participante</f:facet>#{com.idCodPartCom}
</h:column>
<h:column>
<f:facet name="header">Comentários</f:facet>#{com.textoCom}
</h:column>
</h:dataTable>Raimundo Ramos
Curtidas 0
Respostas
Efraim Filho
11/10/2012
o seu managedBean está mapeado no faces-context ??
ou esta com a anotação ?
seu managedBean possuim uma lida do proprio managed bean ?????
GOSTEI 0
Raimundo Ramos
11/10/2012
[quote="efraimgentil"]o seu managedBean está mapeado no faces-context ??
ou esta com a anotação ?
seu managedBean possuim uma lida do proprio managed bean ?????
Está mapeado no faces-config.xml eis o código: <managed-bean>
<managed-bean-name>comBean</managed-bean-name>
<managed-bean-class>pkgListaFour.ComentarioBean</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean><navigation-rule>
<from-view-id>comentario.xhtml</from-view-id>
<navigation-case>
<from-outcome>sucesso</from-outcome>
<to-view-id>comentarioCadastrado.xhtml</to-view-id>
</navigation-case>
</navigation-rule>GOSTEI 0
Efraim Filho
11/10/2012
Ok, mas ao inves de você criar uma lista de managedBean , que tal criar uma classe externa ?
tipo
e seu managed bean contem uma lista dessa classe
public class Comentario{
private Integer id;
private String comentario;
//gets e seters
}
GOSTEI 0
Raimundo Ramos
11/10/2012
[quote="efraimgentil"]Ok, mas ao inves de você criar uma lista de managedBean , que tal criar uma classe externa ?
tipo
e seu managed bean contem uma lista dessa classe
É uma idéia legal, porém gostaria de saber utilizar o gerenciamento Bean, pois vou precisar bastante mais adiante. E como não está apresentando erro... queria ver o que falta para esse código funcionar... pode me ajudar mais nesse sentido?
public class Comentario{
private Integer id;
private String comentario;
//gets e seters
}
GOSTEI 0
Davi Costa
11/10/2012
Na sua tabela vc definiu esse valor:
No seu bean possui o getter e setter dessa lista?
tipo : getLista() e setLista(...)?
O jsf precisa disso p exibir na página
abcs
<h:dataTable value="#{comentarioBean.lista}" var="com" rules="rows">
GOSTEI 0
Raimundo Ramos
11/10/2012
[quote="davi.costa"]Na sua tabela vc definiu esse valor:
No seu bean possui o getter e setter dessa lista?
tipo : getLista() e setLista(...)?
O jsf precisa disso p exibir na página
abcs
Sim aí está ela completa...
<h:dataTable value="#{comentarioBean.lista}" var="com" rules="rows">
public class ComentarioBean {
private int idCom;
private int idTemaCom;
private int idCodPartCom;
private String textoCom;
private int statusCom;
private List<ComentarioBean> lista = new ArrayList<ComentarioBean>();
public List<ComentarioBean> getLista() {
if (this.lista == null) {
ComentarioBean comentarioBean = new ComentarioBean();
this.lista = comentarioBean.listar();
}
return this.lista;
}
public List<ComentarioBean> listar() {
return this.lista;
}
public String insereComentario() {
lista.add(this);
return "sucesso";
}
public String erroPagina() {
return "erro";
}
public int getIdCom() {
return idCom;
}
public void setIdCom(int idCom) {
this.idCom = idCom;
}
public int getIdTemaCom() {
return idTemaCom;
}
public void setIdTemaCom(int idTemaCom) {
this.idTemaCom = idTemaCom;
}
public int getIdCodPartCom() {
return idCodPartCom;
}
public void setIdCodPartCom(int idCodPartCom) {
this.idCodPartCom = idCodPartCom;
}
public String getTextoCom() {
return textoCom;
}
public void setTextoCom(String textoCom) {
this.textoCom = textoCom;
}
public int getStatusCom() {
return statusCom;
}
public void setStatusCom(int statusCom) {
this.statusCom = statusCom;
}
}
GOSTEI 0
Davi Costa
11/10/2012
Reparou que vc inicializa a variável mas não atribui os objetos a ela:
Vc pode mudar sua verificação para:
abcs
private List<ComentarioBean> lista = new ArrayList<ComentarioBean>();//inicializa aqui
public List<ComentarioBean> getLista() {
if (this.lista == null) { //como inicializou não preencheu com itens
ComentarioBean comentarioBean = new ComentarioBean();
this.lista = comentarioBean.listar();
}
return this.lista;
}
if (this.lista == null || this.lista.size() ==0)
GOSTEI 0
Raimundo Ramos
11/10/2012
[quote="davi.costa"]Reparou que vc inicializa a variável mas não atribui os objetos a ela:
Vc pode mudar sua verificação para:
abcs
Olá Davi. Mudei a classe que ficou assim:
private List<ComentarioBean> lista = new ArrayList<ComentarioBean>();//inicializa aqui
public List<ComentarioBean> getLista() {
if (this.lista == null) { //como inicializou não preencheu com itens
ComentarioBean comentarioBean = new ComentarioBean();
this.lista = comentarioBean.listar();
}
return this.lista;
}
if (this.lista == null || this.lista.size() ==0)
@ManagedBean
@RequestScoped
public class ComentarioBean {
private int idCom;
private int idTemaCom;
private int idCodPartCom;
private String textoCom;
private int statusCom;
private List<ComentarioBean> lista = new ArrayList<ComentarioBean>();
public List<ComentarioBean> getLista() {
if (this.lista == null || this.lista.isEmpty()) {
ComentarioBean comentarioBean = new ComentarioBean();
this.lista = comentarioBean.listar();
}
return this.lista;
}
public List<ComentarioBean> listar() {
return this.lista;
}
public String insereComentario() {
lista.add(this);
return "sucesso";
}GOSTEI 0
Davi Costa
11/10/2012
Não precisa disso tb não.
Basta ficar assim:
abcs
private List<ComentarioBean> lista = new ArrayList<ComentarioBean>();
private List<ComentarioBean> lista;
GOSTEI 0
Raimundo Ramos
11/10/2012
[quote="davi.costa"]Não precisa disso tb não.
Basta ficar assim:
abcs
Ao fazer isso surgiu o erro:private List<ComentarioBean> lista = new ArrayList<ComentarioBean>();
private List<ComentarioBean> lista;
java.lang.NullPointerException
GOSTEI 0
Davi Costa
11/10/2012
O jsf inicia seus atributos no construtor padrão (public e sem argumentos), então o ideal é inicializar lá.
abcs
public SeuBean(){
suaLista = new ArrayList<SeuTipo>();
}
GOSTEI 0
Raimundo Ramos
11/10/2012
[quote="davi.costa"]O jsf inicia seus atributos no construtor padrão (public e sem argumentos), então o ideal é inicializar lá.
abcs
Deixei a classe dessa forma:
public SeuBean(){
suaLista = new ArrayList<SeuTipo>();
}
@ManagedBean
@RequestScoped
public class ComentarioBean {
private int idCom;
private int idTemaCom;
private int idCodPartCom;
private String textoCom;
private int statusCom;
private List<ComentarioBean> lista;
public ComentarioBean() {
lista = new ArrayList<ComentarioBean>();
}
public List<ComentarioBean> getLista() {
if (this.lista == null || this.lista.isEmpty()) {
ComentarioBean comentarioBean = new ComentarioBean();
this.lista = comentarioBean.listar();
}
return this.lista;
}
public List<ComentarioBean> listar() {
return this.lista;
}
public String insereComentario() {
lista.add(this);
return "sucesso";
}
<h:dataTable value="#{comentarioBean.lista}" var="com" rules="rows">
<f:facet name="caption">Comentários relativos aos temas desenvolvidos
</f:facet>
<f:facet name="header">Listagem dos comentários</f:facet>
<f:facet name="footer">Fim da listagem</f:facet>
<h:column>
<f:facet name="header">Cód. do Tema</f:facet>#{com.idTemaCom}
</h:column>
<h:column>
<f:facet name="header">Cód. do Participante</f:facet>#{com.idCodPartCom}
</h:column>
<h:column>
<f:facet name="header">Comentários</f:facet>#{com.textoCom}
</h:column>
</h:dataTable>
GOSTEI 0
Davi Costa
11/10/2012
O seu método inserir n salva no banco.
Então comoé só em memória, acho q vai ter que deixar o escopo do seu Bean de Sessão, testa, tira o escopo de rquisição e coloca de sessão.
abcs
GOSTEI 0
Raimundo Ramos
11/10/2012
[quote="davi.costa"]O seu método inserir n salva no banco.
Então comoé só em memória, acho q vai ter que deixar o escopo do seu Bean de Sessão, testa, tira o escopo de rquisição e coloca de sessão.
abcs
:!:
Realmente, Davi. Mudei o scopo do bean comentário para session conforme vc instruiu, e deu certinho. Falta só eu fazer o loop para mostrar as ocorrências do array.
Obrigado mesmo!!!
GOSTEI 0