Combobox aparece preenchida, mas nao com os dados que eu quero!

2 respostas
douglasrauber

Boa noite!

Galera, tenho um JSF com o conteúdo:

<!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:ui="http://java.sun.com/jsf/facelets"
	xmlns:p="http://primefaces.prime.com.tr/ui">

<ui:insert name="menu">
	<ui:include src="/cabecalho.xhtml" />
</ui:insert>

<h:body>
	<h:panelGrid style="margin: auto">
		<h:form>
			<p:panel closable="false" header="Cadastro de Unidades">
				<h:panelGrid>
					<p:messages />
					<h:panelGrid columns="2">
						<h:outputText value="Secretaria:" />
						<h:selectOneMenu value="#{unidade.secretaria}" id="sec">
							<f:selectItems value="#{secretariaBean.listaSecretaria}" />
						</h:selectOneMenu>
						<h:outputText value="Nome:" />
						<h:inputText id="nome" value="#{unidadeBean.unidade.nome}"
							required="true" requiredMessage="Campo Nome é Obrigatório" />
					</h:panelGrid>
					<h:commandButton value="Cadastrar"
						action="#{unidadeBean.gravar}" />
				</h:panelGrid>
			</p:panel>
		</h:form>
	</h:panelGrid>
</h:body>
</html>

no campo da Secretaria

<h:outputText value="Secretaria:" />
						<h:selectOneMenu value="#{unidade.secretaria}" id="sec">
							<f:selectItems value="#{secretariaBean.listaSecretaria}" />
						</h:selectOneMenu>

eu gostaria que mostrasse o conteúdo “Nome-Código” da secretaria já cadastrada no banco. Porém, aparece apenas Model.Secretaria@XXXXXX, onde o XXXXXX é variável para cada ocorrência da classe Secretaria, acredito que seja uma referencia ao objeto, porém não estou sabendo fazer aparecer como eu quero.
O Bean da classe secretaria:

package Bean;

import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;
import javax.servlet.http.HttpServletRequest;
import Dao.Dao;
import Dao.DaoFactory;
import Model.Secretaria;

@ManagedBean
@SessionScoped
public class SecretariaBean {

	Secretaria secretaria = new Secretaria();

	public void gravar() {
		Dao<Secretaria> dao = new DaoFactory().getSecretariaDao();
		dao.adiciona(secretaria);
		secretaria = new Secretaria();
	}

	public List<Secretaria> getSecretarias() {
		Dao<Secretaria> dao = new DaoFactory().getSecretariaDao();
		return dao.listaTudo();
	}

	public List<SelectItem> getListaSecretaria() {
		List<SelectItem> secretarias = new ArrayList<SelectItem>();
		List<Secretaria> listaSec = getSecretarias();
		secretarias.add(new SelectItem(null, ""));
		for (Secretaria obj : listaSec) {
			secretarias.add(new SelectItem(obj.getId(), obj.toString()));
		}
		return secretarias;
	}

	public void remover() {
		FacesContext context = FacesContext.getCurrentInstance();
		HttpServletRequest req = (HttpServletRequest) context
				.getExternalContext().getRequest();
		Long idSecretaria = new Long((req.getParameter("id")));
		Dao<Secretaria> dao = new DaoFactory().getSecretariaDao();
		dao.remove(dao.procura(idSecretaria));
	}

	public Secretaria getSecretaria() {
		return secretaria;
	}

	public void setSecretaria(Secretaria secretaria) {
		this.secretaria = secretaria;
	}

}

Quem puder me orientar, fico grato!

Att

DRauber

2 Respostas

douglasrauber

Bom dia!

Achei…

no meu beanSecretaria troquei:

secretarias.add(new SelectItem(obj.getId(), obj.toString()));

Por:

secretarias.add(new SelectItem(obj.getId(), obj.getNome()));

Vlw

Abraço e sucesso a todos!

DRauber

Flavio_Almeida

É uma boa prática reescrever o método toString de suas classes.

Abraço

Criado 15 de novembro de 2010
Ultima resposta 16 de nov. de 2010
Respostas 2
Participantes 2