Ola pessoal ;
Estou montando um sistema de vendas de musicas por download para fins de estudo , estou utilizando IDE eclipse,hibernate 3.0 ,jsf 2.0 e primefaces 3.0,mas estou com um problema de relacionamento com o primefaces . Fiz uma dataTable que recebe o objeto cantor e mostra na tela o nome,genero e imagem .O atributo genero é um relacionamento ManyToOne ,quando apenas visualizo a lista de cantores,traz todos os atributos certos,mas quando adiciono um novo cantor,a coluna genero do novo cantor nao é preenchida ,nos debugs que eu fiz percebi que o ultimo objeto adicionado na lista o atributo genero carrega apenas o Id,mas nao carrega o nome do genero. Segue codigos
ManagedBean:
[code]
@ManagedBean(name=“cantorLogic”)
@SessionScoped
public class CantorLogic {
private Cantor cantor;
private DaoFactory daoFactory;
private Listcantores;
private Listgeneros;
private String caminhoBanco;
private Genero genero;
FacesContext fc = FacesContext.getCurrentInstance();
HttpSession session = (HttpSession) fc.getExternalContext().getSession(false);
public CantorLogic(){
DaoFactory daoFactory = new DaoFactory();
this.daoFactory = daoFactory;
this.cantor = new Cantor();
cantor.setGenero(new Genero());
}
public String novo(){
this.cantor = new Cantor();
cantor.setGenero(new Genero());
session.setAttribute("IMAGEM",null);
return "cantor";
}
public String adicionaOuAtualiza(){
this.daoFactory.beginTransaction();
caminhoBanco = (String) session.getAttribute("IMAGEM");
cantor.setImagem(caminhoBanco);
if(cantor.getId()==0){
this.daoFactory.getCantorDao().adiciona(cantor);
}
else {
this.daoFactory.getCantorDao().atualiza(cantor);
}
this.daoFactory.commit();
return "listacantor";
}
public void remove(){
try{
this.daoFactory.beginTransaction();
this.daoFactory.getCantorDao().remove(cantor);
this.daoFactory.commit();
JSFUtil.addSuccessMessage("Cantor removido com sucesso");
}catch(ConstraintViolationException e){
JSFUtil.addErrorMessage("Cantor possui album(s) cadastrado(s),nao pode ser excluido");
}
}
public List <Genero> getListaGenero(){
generos = this.daoFactory.getGeneroDao().listaTudo();
return generos;
}
public List <Cantor> getLista(){
cantores = null;
this.cantores = null;
this.cantores = this.daoFactory.getCantorDao().listaTudo();
return cantores;
}
public List<Genero> getGeneros() {
return generos;
}
public void setCaminhoBanco(String caminhoBanco) {
this.caminhoBanco = caminhoBanco;
}
public String getCaminhoBanco() {
return caminhoBanco;
}
public List<Cantor> getCantores() {
return cantores;
}
public Cantor getCantor() {
return cantor;
}
public void setCantor(Cantor cantor) {
this.cantor = cantor;
}
public void setCantores(List<Cantor> cantores) {
this.cantores = cantores;
}
public void setGeneros(List<Genero> generos) {
this.generos = generos;
}
public void setGenero(Genero genero) {
this.genero = genero;
}
public Genero getGenero() {
return genero;
}
}[/code]
Xhtml :
[img][/img]<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.prime.com.tr/ui"
xmlns:ui="http://java.sun.com/jsf/facelets">
<h:head>
<link rel = "stylesheet" type = "text/css" href = "/loja/resourses/estilo.css" />
<h:title>cantores</h:title>
</h:head>
<h:body>
<p><a href="../menu.xhtml">Menu principal</a></p>
<h:panelGroup>
<h:form>
<h1>cantores</h1>
<p:messages/><h:outputLabel/>
<h:commandButton class ="novo" action = "#{cantorLogic.novo}" />
</h:form>
<h:form id="form">
<h:commandButton action="cantor" class="editar" />
<h:commandButton actionListener="#{cantorLogic.remove}" class="excluir" update ="tabelacantores"/>
<p:dataTable id="tabelacantores" value ="#{cantorLogic.lista}" var="cantor" rowKey="#{cantor.id}" selectionMode="single" selection="#{cantorLogic.cantor}" >
<p:column>
<f:facet name="header">
<h:outputText value="Nome" />
</f:facet>
<h:outputText value="#{cantor.nome}" />
</p:column >
<p:column sortBy="#{cantor.genero}" filterBy="#{cantor.genero}" filterMatchMode="contains">
<f:facet name="header">
<h:outputText value="Genero" style="font-weight:bold" />
</f:facet>
<h:outputText value="#{cantor.genero.nome}"/>
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Imagem" />
</f:facet>
<p:lightBox styleClass="imagebox">
<p:graphicImage value="#{cantor.imagem}" />
</p:lightBox>
</p:column >
</p:dataTable>
</h:form>
</h:panelGroup>
</h:body>
</html>