Primefaces nao carrega relacionamento em nova insercao

0 respostas
kyel

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:

@ManagedBean(name="cantorLogic")
@SessionScoped
public class CantorLogic {
	private Cantor cantor;
	private DaoFactory daoFactory;
	private List<Cantor>cantores;
	private List<Genero>generos;
	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;
	}
	

}

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>
Criado 27 de setembro de 2012
Respostas 0
Participantes 1