privateintcod;privateStringnome;privateTemaBeantema;/** * @return the cod */publicintgetCod(){returncod;}/** * @param cod the cod to set */publicvoidsetCod(intcod){this.cod=cod;}/** * @return the nome */publicStringgetNome(){returnnome;}/** * @param nome the nome to set */publicvoidsetNome(Stringnome){this.nome=nome;}publicComentarioBean(){}publicComentarioBean(intcodComentario,StringnomeComentario,TemaBeantema){this.cod=codComentario;this.nome=nomeComentario;this.tema=tema;}/** * @return the tema */publicTemaBeangetTema(){returntema;}/** * @param tema the tema to set */publicvoidsetTema(TemaBeantema){this.tema=tema;}publicvoidCadastrarComentario()throwsIOException{try{ComentarioDAOcomentariodao=newComentarioDAO();comentariodao.Cadastrar(this.nome);intc=comentariodao.pegarCod(this.nome);comentariodao.CadastrarTemaComentario(cod,c);FacesContext.getCurrentInstance().getExternalContext().redirect("CadastrarSucesso.xhtml");}catch(Exceptione){FacesContext.getCurrentInstance().getExternalContext().redirect("CadastrarErro.xhtml");}}
Coloca o seu código entre as tags [ code ] e [ /code ] (sem os espaços) para que a gente consiga analizar melhor, desta forma fica horrível de se ler.
Posta também seu TemaBean
benignoms
Primeiro, os nomes dos MB devem ser com a primeira letra em minúsculo, pois são objetos. Com relação ao problema, deve estar acontecendo algum erro na fase de validação. Coloca um <h:messages/> para ver se algum erro é exibido.
midanaf
TemaBean
@ManagedBean(name="TemaBean")@SessionScopedpublicclassTemaBean{/** * Creates a new instance of TemaBean */publicTemaBean(){}privateintid;privateStringdescricao;privateList<SelectItem>selectTema;/** * @return the id */publicintgetId(){returnid;}/** * @param id the id to set */publicvoidsetId(intid){this.id=id;}/** * @return the descricao */publicStringgetDescricao(){returndescricao;}/** * @param descricao the descricao to set */publicvoidsetDescricao(Stringdescricao){this.descricao=descricao;}publicTemaBean(intid,Stringdescricao){this.id=id;this.descricao=descricao;}publicvoidCadastrar()throwsIOException{try{TemaDAOdao=newTemaDAO();dao.Cadastrar(this.descricao);FacesContext.getCurrentInstance().getExternalContext().redirect("CadastrarSucesso.xhtml");}catch(Exceptione){FacesContext.getCurrentInstance().getExternalContext().redirect("CadastrarErro.xhtml");}}/** * @return the selectTema */publicList<SelectItem>getSelectTema(){selectTema=newArrayList<SelectItem>();TemaDAOdao=newTemaDAO();List<TemaBean>listaTema=dao.listar();for(TemaBeantemaBean:listaTema){selectTema.add(newSelectItem(temaBean.id,temaBean.descricao));}returnselectTema;}/** * @param selectTema the selectTema to set */publicvoidsetSelectTema(List<SelectItem>selectTema){this.selectTema=selectTema;}}
ComentarioBean
@ManagedBean(name="ComentarioBean")@RequestScopedpublicclassComentarioBean{privateintcod;privateStringnome;privateTemaBeantema;/** * @return the cod */publicintgetCod(){returncod;}/** * @param cod the cod to set */publicvoidsetCod(intcod){this.cod=cod;}/** * @return the nome */publicStringgetNome(){returnnome;}/** * @param nome the nome to set */publicvoidsetNome(Stringnome){this.nome=nome;}publicComentarioBean(){}publicComentarioBean(intcodComentario,StringnomeComentario,TemaBeantema){this.cod=codComentario;this.nome=nomeComentario;this.tema=tema;}/** * @return the tema */publicTemaBeangetTema(){returntema;}/** * @param tema the tema to set */publicvoidsetTema(TemaBeantema){this.tema=tema;}publicvoidCadastrarComentario()throwsIOException{try{ComentarioDAOcomentariodao=newComentarioDAO();// comentariodao.Cadastrar(this.nome);intc=comentariodao.pegarCod(this.nome);comentariodao.CadastrarTemaComentario(cod,c);FacesContext.getCurrentInstance().getExternalContext().redirect("CadastrarSucesso.xhtml");}catch(Exceptione){FacesContext.getCurrentInstance().getExternalContext().redirect("CadastrarErro.xhtml");}}publicList<ComentarioBean>listarTemaComentario(){List<ComentarioBean>temaComentario=newArrayList<ComentarioBean>();ComentarioDAOcomentariodao=newComentarioDAO();temaComentario=comentariodao.listarTemaComentario();returntemaComentario;}}
sim benignoms,
antes de tudo obrigado pela ajuda.
eu tentei colocar o messages mas não mostrou nenhuma mensagem, pode me indicar onde posso colocar?
e sobre os métodos, eu coloquei os nomes dos metodos em maiúsculo, e chamar com minusculo da um erro dizendo que não encontrou.
será que é isso?
benignoms
Veja bem:
Método é uma coisa objeto é outra. Mas eu vi que você nomeia os objetos com letra maiúscula(@ManagedBean(name = “TemaBean”)). No console do Glassfish/Tomcat não aparece nenhum erro?
midanaf:
sim benignoms,
antes de tudo obrigado pela ajuda.
eu tentei colocar o messages mas não mostrou nenhuma mensagem, pode me indicar onde posso colocar?
e sobre os métodos, eu coloquei os nomes dos metodos em maiúsculo, e chamar com minusculo da um erro dizendo que não encontrou.
será que é isso?
midanaf
pois é, como falei sou novo e eu sabia que objeto começa com minusculo, mas pra te dizer a verdade eu não sabia que este @managedBean(name) era criando objeto. obrigado pela informação.
olha no glash fish da um Advertência.
Advertência: JSF1063: AVISO! Definindo valor de atributo não serializável em HttpSession (chave: TemaBean, classe do valor: jv.TemaBean).
só que como estou chamando uma tela de erro, no meu browse, vai pra tela de erro.
quando vou debugando, vejo que o tema.id é null
midanaf
fiz uma alteração no metodo cadastrar no comentárioBean
coloquei tema.getId() no luggar de cod, pois cod era o codigo de comentário. mas mesmo assim o tema vem null. é como se ele não seleciona o tema. será é algum problema com selectedItem?
bobfroes
Se vc estiver utilizando o netbeans, marque a variável que vc quer ver o valor como “novo observador”, indique um ponto de interrupção na linha que vc quer interromper a execução, depois execute no modo depurador. Daí fica clicando no ícone “Passar por dentro (F7)”…vc conseguirá ver passo a passo e execução do seu código.
midanaf
bobfroes,
não sei marcar varia=ável como novo observador. favor pode me dizer como fazer?
mas também já debuguei, só que o objeto tema ja vem null. não estou sabendo pegar dado do tema.
que estou listando no combobox
Tenta utilizar a classe Converter (tem muitos exemplos por aí), isso pq sua lista é do tipo SelectItem . Um item de sua lista será convertido para um objeto da sua classe.
Outra coisa, vendo o selectTema tu tá usando o teu Managed Bean dentro de um list para popular a combo e isso é uma coisa horrivel. Tu tem q criar uma classe com id e descricao, chama ela de Tema, ela pode até ser uma entidade. Feito isso vc popula a List com Tema e não com TemaBean. Mas até ser que funcione, só que isso é feio.
O que tá acontecendo é o seguinte, tu tem uma combo preenchida com valores do getSelectTema, eles aparecem? Ai quando tu seleciona ele pega a propriedade itemValue, que eh ="#{TemaBean.id}" e tenta setar no value do combo que tb eh ="#{TemaBean.id}". Ou seja ambos são nulo. O q tu quer setar la é ="#{tema.id}" que ta na combo. Acredito que com isso ja funciona. Mas q tem codigo tá feio tá.
midanaf
valeu raphael…
Pessoal muito obrigado,
na verdade de forma que estava a estrutura do meu trabalho ficaria dificil resolver. então com ajuda do Raphael, tirei os atributos do tema e coloquei numa classe (model). depois ficou mais fácil listar e pegar o codigo.
segue o ComentarioBean depois das mudanças
/* * To change this template, choose Tools | Templates * and open the template in the editor. */packagecontroler;importdao.ComentarioDAO;importdao.TemaDAO;importjava.io.IOException;importjava.io.Serializable;importjava.util.ArrayList;importjava.util.List;importjavax.faces.bean.ManagedBean;importjavax.faces.bean.RequestScoped;importjavax.faces.context.FacesContext;importjavax.faces.model.SelectItem;importmodel.Comentario;importmodel.Tema;/** * * @author Midana */@ManagedBean(name="comentarioBean")@RequestScopedpublicclassComentarioBeanimplementsSerializable{privateComentariocomentario;privateList<SelectItem>selectTema;privateList<SelectItem>selectComentario;publicComentarioBean(){comentario=newComentario();}publicvoidCadastrarComentario()throwsIOException{try{ComentarioDAOcomentariodao=newComentarioDAO();comentariodao.Cadastrar(getComentario().getNome());intc=comentariodao.pegarCod(getComentario().getNome());comentariodao.CadastrarTemaComentario(Integer.parseInt(getComentario().getTema()),c);FacesContext.getCurrentInstance().getExternalContext().redirect("CadastrarSucesso.xhtml");}catch(Exceptione){FacesContext.getCurrentInstance().getExternalContext().redirect("CadastrarErro.xhtml");}}publicList<Comentario>listarTemaComentario(){List<Comentario>temaComentario=newArrayList<Comentario>();ComentarioDAOcomentariodao=newComentarioDAO();temaComentario=comentariodao.listarTemaComentario();returntemaComentario;}/** * @return the selectTema */publicList<SelectItem>getSelectTema(){selectTema=newArrayList<SelectItem>();TemaDAOdao=newTemaDAO();List<Tema>listaTema=dao.listar();for(Tematema:listaTema){selectTema.add(newSelectItem(tema.getId(),tema.getDescricao()));}returnselectTema;}/** * @return the comentario */publicComentariogetComentario(){returncomentario;}/** * @param comentario the comentario to set */publicvoidsetComentario(Comentariocomentario){this.comentario=comentario;}publicList<SelectItem>getSelectComentario(){selectComentario=newArrayList<SelectItem>();ComentarioDAOdao=newComentarioDAO();List<Comentario>listaComenatario=dao.listarTemaComentario();for(Comentariocomentarios:listaComenatario){selectComentario.add(newSelectItem(comentarios.getNome(),comentarios.getTema()));}returnselectComentario;}}