tenho o seguinte problema, venho desenvolvendo uma aplicação web e estou com um erro na hora de listar meu DataTable, é impressionante pois, em 4 das listegens que eu tenho que exibir, apenas 1 está funcionando corretamente. as que estão erradas somente é exibido os botões de alteração e exclusão.
segue o codigo de uma das classes que estão erradas.
public class PerfilAction {
private Perfil perfil = new Perfil();
private List listPerfil = new ArrayList();
private String codigo = new String();
private UIData objPerfil = new UIData();
private String valor = “”;
private String campo = “”;
public String imprimir() {
// imprime a listagem atual exibida.
return null;
}
public String grava() {
new PerfilDao().gravar(perfil);
perfil = new Perfil();
return null;
}
public String pesquisa(){
if(!valor.equals("")){
if(campo.equals("codigo"))
listPerfil = new PerfilDao().findByCodigo(valor);
if(campo.equals("descricao"))
listPerfil = new PerfilDao().findByDescricao(valor);
}
return null;
}
// ao tentar ser deletado o perfil será verificado se existe algum usuario
// utilizando aquele perfil, caso exista o sistema não deixará excluir.
public String delete() {
try {
perfil = (Perfil) objPerfil.getRowData();
new PerfilDao().delete(perfil);
// mensagem de sucesso.
} catch (Exception e) {
// mensagem de erro.
}
return null;
}
public String altera() {
perfil = (Perfil) objPerfil.getRowData();
return "alteraPerfil";
}
public String getCodigo() {
codigo = new PerfilDao().proximoCodigo();
return codigo;
}
public void setCodigo(String codigo) {
this.codigo = codigo;
}
public Perfil getPerfil() {
return perfil;
}
public void setPerfil(Perfil perfil) {
this.perfil = perfil;
}
public List<Perfil> getListPerfil() {
if(valor.equals(""))
listPerfil = new PerfilDao().list();
return listPerfil;
}
public void setListPerfil(List<Perfil> listPerfil) {
this.listPerfil = listPerfil;
}
public UIData getObjPerfil() {
return objPerfil;
}
public void setObjPerfil(UIData objPerfil) {
this.objPerfil = objPerfil;
}
public String getValor() {
return valor;
}
public void setValor(String valor) {
this.valor = valor;
}
public String getCampo() {
return campo;
}
public void setCampo(String campo) {
this.campo = campo;
}
a minha DAO que busca os dados para incrementar a lista está funcionando tranquilamente, soh que as unicas coisas que exibe na lista são os buttons de alterar e excluir coisa sem logica. alguem poderia me dar uma dica do que eu estou fazendo de errado ?
OBS: as classes Action estão todas funcionando corretamente no meu faces.
já verifiquei ela retorna a lista de objeto perfeitamente preenchida… a lista de perfil funcionou, mas não mexi em absolutamente nada do código, apenas no width da datatable,
mas as outras continuam erradas.
o pior disso tudo é que eu não achei onde está a raiz do problema.
package br.com.docfacil.docfacilweb.model.dao;
import java.util.ArrayList;
import java.util.List;
import javax.faces.model.SelectItem;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.AnnotationConfiguration;
import br.com.docfacil.docfacilweb.model.bean.Categoria;
import br.com.docfacil.docfacilweb.model.bean.Subcategoria;
public class SubcategoriaDao {
Session s = null;
SessionFactory f = null;
Transaction t = null;
public SubcategoriaDao() {
f = new AnnotationConfiguration().configure(
"/br/com/docfacil/docfacilweb/model/dao/hibernate.cfg.xml")
.buildSessionFactory();
s = f.openSession();
t = s.beginTransaction();
}
public void gravar(Subcategoria subcategoria) {
s.saveOrUpdate(subcategoria);
t.commit();
s.close();
}
public List<Subcategoria> list() {
Query q = s.createQuery("from Subcategoria");
List<Subcategoria> listaSubcategoria = q.list();
return listaSubcategoria;
}
public void delete(Subcategoria subcategoria) {
s.delete(subcategoria);
t.commit();
s.close();
}
public List<SelectItem> listCategoria() {
Query q = s.createQuery("from Categoria");
List<Categoria> listaCategoria = q.list();
List<SelectItem> categorias = new ArrayList<SelectItem>();
for (Categoria categoria : listaCategoria) {
categorias.add(new SelectItem(categoria.getCodigo().toString(),
categoria.getNivel() + " - " + categoria.getDescricao()));
}
return categorias;
}
public List<Subcategoria> findByCodigo(String valor) {
Query q = s.createQuery("from Subcategoria where codigo = :valor");
q.setInteger("valor", Integer.parseInt(valor));
return q.list();
}
public List<Subcategoria> findByDescricao(String valor) {
Query q = s
.createQuery("from Subcategoria where descricao like :valor");
q.setString("valor", "%" + valor + "%");
return q.list();
}
public List<Subcategoria> findBySubnivel(String valor) {
Query q = s.createQuery("from Subcategoria where subnivel = :valor");
q.setString("valor", valor);
return q.list();
}
public List<Subcategoria> findByCategoria(String valor) {
Query q = s
.createQuery("from Subcategoria where categoria_codigo = :valor");
q.setInteger("valor", Integer.parseInt(valor));
return q.list();
}
public String proximoCodigo() {
Query q = s.createSQLQuery("select max(codigo) from subcategoria");
Integer result = (Integer) q.uniqueResult();
if (result == null) {
return "1";
} else {
return "" + (result + 1);
}
}
// public static void main(String[] args) {
// List<Subcategoria> subList = new ArrayList<Subcategoria>();
// subList = new SubcategoriaDao().list();
// for (Subcategoria subcategoria : subList) {
// System.out.println(subcategoria.getCodigo());
// System.out.println(subcategoria.getDescricao());
// System.out.println(subcategoria.getCategoria().getCodigo());
// System.out.println(subcategoria.getSubnivel());
// }
// }
}
Action
package br.com.docfacil.docfacilweb.control;
import java.util.ArrayList;
import java.util.List;
import javax.faces.component.UIData;
import javax.faces.model.SelectItem;
import br.com.docfacil.docfacilweb.model.bean.Categoria;
import br.com.docfacil.docfacilweb.model.bean.Subcategoria;
import br.com.docfacil.docfacilweb.model.dao.SubcategoriaDao;
public class SubcategoriaAction {
private Subcategoria subcategoria = new Subcategoria();
private Categoria categoria = new Categoria();
private List<Subcategoria> listSubcategoria = new ArrayList<Subcategoria>(); // lista
// de
// subcategorias
private List<SelectItem> listCategoria = new ArrayList<SelectItem>(); // lista
// de
// categorias
// para
// o
// listbox
private String valor = ""; // valor da pesquisa
private String campo = ""; // campo da tabela de pesquisa selecionado no
// radiobox
private String codigo = ""; // recebe o valor do proximo codigo para
// exibição.
private UIData objSubcategoria = new UIData(); // recebe o valor da lista
// de subcategorias.
private String codigoCategoria = new String(); // recebe o valor de uma
// listbox de categoria.
public String imprimir() {
return null;
}
public String grava() {
try {
Categoria categoria = new Categoria();
categoria.setCodigo(Integer.parseInt(codigoCategoria));
subcategoria.setCategoria(categoria);
new SubcategoriaDao().gravar(subcategoria);
// messagem
} catch (Exception e) {
// mensagem
} finally {
subcategoria = null;
return null;
}
}
public String delete() {
// se a subcategoria não estiver vinculada a nenhuma rota, então ele
// enviará uma mensagem informando que não poderá ser excluido.
new SubcategoriaDao().delete(subcategoria);
return null;
}
public String pesquisa() {
if (valor.equals("")) {
listSubcategoria = new SubcategoriaDao().list();
} else {
if (campo.equals("codigo"))
listSubcategoria = new SubcategoriaDao().findByCodigo(valor);
if (campo.equals("descricao"))
listSubcategoria = new SubcategoriaDao().findByDescricao(valor);
if (campo.equals("categoria"))
listSubcategoria = new SubcategoriaDao().findByCategoria(valor);
if (campo.equals("subnivel"))
listSubcategoria = new SubcategoriaDao().findBySubnivel(valor);
}
return null;
}
public String altera() {
subcategoria = (Subcategoria) objSubcategoria.getRowData();
return "alteraSubcategoria";
}
// getter and setter
public void setSubcategoria(Subcategoria subcategoria) {
this.subcategoria = subcategoria;
}
public Categoria getCategoria() {
return categoria;
}
public void setCategoria(Categoria categoria) {
this.categoria = categoria;
}
// list recebendo valores default caso não tenha sido passado nenhum
// parametro no formulario de pesquisa.
public List<Subcategoria> getListSubcategoria() {
if (valor.equals(""))
listSubcategoria = new SubcategoriaDao().list();
for(Subcategoria subcategoria : listSubcategoria){
System.out.println(subcategoria.getCodigo());
System.out.println(subcategoria.getDescricao());
System.out.println(subcategoria.getCategoria().getCodigo());
System.out.println(subcategoria.getSubnivel());
System.out.println("====================================================");
}
return listSubcategoria;
}
public void setListSubcategoria(List<Subcategoria> listSubcategoria) {
this.listSubcategoria = listSubcategoria;
}
public Subcategoria getSubcategoria() {
return subcategoria;
}
// select do formulario de inclusão de subcategoria recebendo os labels e
// seus valores.
public List<SelectItem> getListCategoria() {
listCategoria = new SubcategoriaDao().listCategoria();
return listCategoria;
}
public void setListCategoria(List<SelectItem> listCategoria) {
this.listCategoria = listCategoria;
}
public String getValor() {
return valor;
}
public void setValor(String valor) {
this.valor = valor;
}
public String getCampo() {
return campo;
}
public void setCampo(String campo) {
this.campo = campo;
}
public String getCodigo() {
codigo = new SubcategoriaDao().proximoCodigo();
return codigo;
}
public void setCodigo(String codigo) {
this.codigo = codigo;
}
public UIData getObjSubcategoria() {
return objSubcategoria;
}
public void setObjSubcategoria(UIData objSubcategoria) {
this.objSubcategoria = objSubcategoria;
}
public String getCodigoCategoria() {
return codigoCategoria;
}
public void setCodigoCategoria(String codigoCategoria) {
this.codigoCategoria = codigoCategoria;
}
}
eu nem li tudo pq fallando sério, tanto código assim na tela desempolga, enfim…
você já tentou converter a lista pra static? esse tpo de erro acontece de vez em quando, às vezes (eu não me lembro em que momentos) a lista deve pertencer à classe e não à instância. se isso resolver avisa, ok?
abs
estatico tambem não funciona, e também as outras classes que eu estou usando a datatable estão exibindo os dados tranquilamente. vou postar o codigo apenas dos objetos q estou usando. 8)
package br.com.docfacil.docfacilweb.control;
action
public class SubcategoriaAction {
private List<Subcategoria> listSubcategoria = new ArrayList<Subcategoria>();
public List<Subcategoria> getListSubcategoria() {
if (valor.equals(""))
listSubcategoria = new SubcategoriaDao().list();
return listSubcategoria;
}
public void setListSubcategoria(List<Subcategoria> listSubcategoria) {
this.listSubcategoria = listSubcategoria;
}
consulta no DAO: isso ja testei varias vezes e esta funcionando tranquilamente.