Na sua tabela vc definiu esse valor:
<h:dataTable value="#{comentarioBean.lista}" var="com" rules="rows">
No seu bean possui o getter e setter dessa lista?
tipo : getLista() e setLista(...)?
O jsf precisa disso p exibir na página
abcs
11/10/2012
Raimundo Ramos
[quote="davi.costa"]Na sua tabela vc definiu esse valor:
<h:dataTable value="#{comentarioBean.lista}" var="com" rules="rows">
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...
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;
}
}
Reparou que vc inicializa a variável mas não atribui os objetos a ela:
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;
}
Vc pode mudar sua verificação para:
if (this.lista == null || this.lista.size() ==0)
abcs
17/10/2012
Raimundo Ramos
[quote="davi.costa"]Reparou que vc inicializa a variável mas não atribui os objetos a ela:
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;
}
Vc pode mudar sua verificação para:
if (this.lista == null || this.lista.size() ==0)
abcs
Olá Davi. Mudei a classe que ficou assim:
@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";
}
Na verificação um novo comentárioBean é criado apenas se ele for nulo ou estiver vazio? O método insereComentario está correto? Ainda não compreendi porque o dataTable vem vazio.
Estou executando a classe e a pagina de sucesso mostra o que foi informado, porém no dataTable... Nada. Sei que o erro não é da Java...rsrsrs.
Não precisa disso tb não.
private List<ComentarioBean> lista = new ArrayList<ComentarioBean>();
Basta ficar assim:
private List<ComentarioBean> lista;
abcs
17/10/2012
Raimundo Ramos
[quote="davi.costa"]Não precisa disso tb não.
private List<ComentarioBean> lista = new ArrayList<ComentarioBean>();
Basta ficar assim:
private List<ComentarioBean> lista;
abcs
Ao fazer isso surgiu o erro:
java.lang.NullPointerException
Deixando da forma anterior ele exibe a página de sucesso. V no debuger que a lista é adicionada, mas ao retornar ao página index, o conteúdo do array não é exibido.
Estou pensando em gravar a informação em tabela ao invés do array, mas aí eu fico sem sacar manipulação de arraylist para essa construção... ah! antes que eu esqueça obrigado pela paciência... mas me ajuda? Eu quero entender e assimilar esses conceitos.
O jsf inicia seus atributos no construtor padrão (public e sem argumentos), então o ideal é inicializar lá.
public SeuBean(){
suaLista = new ArrayList<SeuTipo>();
}
abcs
17/10/2012
Raimundo Ramos
[quote="davi.costa"]O jsf inicia seus atributos no construtor padrão (public e sem argumentos), então o ideal é inicializar lá.
public SeuBean(){
suaLista = new ArrayList<SeuTipo>();
}
abcs
Deixei a classe dessa forma:
@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";
}
O dataTable contido dentro do form ficou assim:
<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>
Porém nada é mostrado. O que eu faço? :zoio:
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
17/10/2012
Raimundo Ramos
[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!!!