Pegar o ID de um selectItems

24 respostas
L

…galera como pego o ID de um selectItems, passo pro managedbeans pra salvar no banco?

24 Respostas

O

Se você quer pegar do selectItems e restaurar num objeto usa o converter

L

como assim?

X

por exemplo ja que vc vai pega nao e uma id e um objeto
e trasfomar em uma string isso que ele quiz dizer
nao tem como vc pega o id do selectintens

A

Se vc quer pegar o id do Objeto selecionado no SelectOneMenu:
vc precisa ter um atributo em num bean, e setar esse atributo no value do SelectOneMenu…

talvez isso te ajude, é em JSF 1.2 mas tem a mesma funcionalidade no JSF 2.0:
http://javasemcafe.blogspot.com/2010/12/javaee-5-selectonemenucombobox-em-jsf.html

L

ola acabei de ler isso no seu blog…mas o erro que esta aparecendo e do value lah sabe, q o rafael pontes parece q solucionou…a principio me passe seu twitter, gostei do seu blog mas naum axei nada lah…

A

então… sou desatualizada… não tenho twitter hihihi :lol:
Mas se está dando erro de validação, provavelmente seu bean de onde vem a lista está como Request
Ou vc está trazendo uma lista com Objetos tipo: Categoria, Cliente e tals e não de SelectItem, se for lista com objetos como falei, vc precisa fazer um converter, é bem chatinho…
aí eu aconselho dar uma olhada no Blog do Rafael Ponte

L

a lista q vem eh do tipo object msm…mas so quero o ID pra jogar no banco saka? olha como estah na minha pagina…

<h:selectOneMenu id="selectCidade" value="#{alunoBean.cidade}" title="Selecione uma cidade" disabled="#{not empty cityBean.codigoCidade}"> <f:selectItems value="#{entradaAlunosBBean.cidades}" /> </h:selectOneMenu >

A

posta os seus beans para dar uma olhada

L

tah meio desorganizado pois estou fazendo teste, ok?

package br.com.luxu.controller;

import javax.faces.event.ActionEvent;

import br.com.luxu.DAO.HibernateDAO;
import br.com.luxu.DAO.InterfaceDAO;
import br.com.luxu.classe.Aluno;
import br.com.luxu.classe.Cidade;
import br.com.luxu.util.FacesContextUtil;

public class AlunoBean {
	
	private String codigoCidade;
	private Aluno aluno = new Aluno();
	private Cidade cidade = new Cidade();

	public void setAluno(Aluno aluno) {
		this.aluno = aluno;
	}

	public Aluno getAluno() {
		return aluno;
	}
	
	public void setCidade(Cidade cidade) {
		this.cidade = cidade;
	}

	public Cidade getCidade() {
		return cidade;
	}
	
	public String getCodigoCidade() {
		return codigoCidade;
	}

	public void setCodigoCidade(String codigoCidade) {
		this.codigoCidade = codigoCidade;
	}
	
	public void salvarAluno(){
		if(this.cidade != null){
				System.out.println("ID da cidade cadastrada: "+ this.cidade.getCid_descricao());
		}
		else System.out.println("cidade esta vazia!!!");
		
		//System.out.println("Aluno: "+this.getAlu_nome());
		if (this.aluno != null){
			
			InterfaceDAO<Aluno> alunoDAO = new HibernateDAO<Aluno>(Aluno.class, FacesContextUtil.getRequestSession());
			//alunoDAO.salvar(aluno);
		}
		else System.out.println("Esta nulo o aluno !!!");
	
	}
	
	public String confirmarCidade(){
		InterfaceDAO<Cidade> cidadeDAO = new HibernateDAO<Cidade>(Cidade.class, FacesContextUtil.getRequestSession());
		return null; // permanece na mesma p&#65533;gina
	}
	
	public void alterarCidade(ActionEvent evt){
		this.codigoCidade = null;
	} 

}
A

preciso ver de onde vem o entradaAlunosBBean.cidades…
e os escopos dos dois!

L
package br.com.luxu.controller;

import java.util.ArrayList;
import java.util.List;
import javax.faces.model.SelectItem;
import org.hibernate.Session;
import br.com.luxu.DAO.HibernateDAO;
import br.com.luxu.DAO.InterfaceDAO;
import br.com.luxu.classe.Cidade;
import br.com.luxu.util.FacesContextUtil;

public class entradaAlunosBackingBean {

	public List<SelectItem> getCidades(){
		
		Session session = FacesContextUtil.getRequestSession();
		InterfaceDAO<Cidade> cidadeDAO = new HibernateDAO<Cidade>(Cidade.class, session);
		List<Cidade> cidades = cidadeDAO.getBeans();
		//FacesContextUtil.setRequestSession(session);
		List<SelectItem> selectCidade = new ArrayList<SelectItem>();
		for (Cidade cidade : cidades ){
			selectCidade.add(new SelectItem(cidade.getCid_codigo().toString(), cidade.getCid_descricao()));
		}
		return selectCidade;
	}
}
A

e qual o escopo dos dois bean?

L
seria isso?
<?xml version="1.0" encoding="UTF-8" ?>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@ taglib uri="http://jsftutorials.net/htmLib" prefix="htm" %>
<%@ taglib uri="http://myfaces.apache.org/tomahawk" prefix="t"%>

<!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:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Cadastro de Alunos - Studio Pilates CorpoAlma</title>
<link rel="stylesheet" href="css/principal.css" type="text/css" />
</head>
<body>
<f:view>
	<htm:div id="divPrincipal" styleClass="corpoPrincipal">
		<h1 id="titulo">Studio Pilates CorpoAlma</h1>
		<htm:div styleClass="corpoEsquerda">
			<htm:fieldset style="borda">
				<htm:legend style="legenda">Cadastro de Alunos</htm:legend>
							<h:form>
								<h:panelGrid columns="4">
									<h:outputLabel value="Código:" for="input-codigo"/>						
									<h:inputText disabled="true" id="input-codigo" size="2" />
									<h:outputLabel value="Nome: " for="input-nome"/>
									<h:inputText value="#{alunoBean.aluno.alu_nome}" required="true" id="input-nome" size="40"/>
								</h:panelGrid><br/>
								<h:panelGrid columns="6">
									<h:outputLabel value="Endereço: "/>
									<h:inputText value="#{alunoBean.aluno.alu_endereco}" size="30"/>
									<h:outputLabel value="Número: "/>
									<h:inputText value="#{alunoBean.aluno.alu_numero}" size="5"/>
									<h:outputLabel value="Complemento: "/>
									<h:inputText value="#{alunoBean.aluno.alu_complemento}" size="5"/>
								</h:panelGrid><br/>
								<h:panelGrid columns="8">
									<h:outputLabel value="Bairro:"/>
									<h:inputText value="#{alunoBean.aluno.alu_bairro}"  size="40"/>
									<h:outputLabel value="Cidade:"/>
									<h:selectOneMenu id="selectCidade"  value="#{alunoBean.cidade}"
									 		title="Selecione uma cidade" 
									 		disabled="#{not empty cityBean.codigoCidade}">
										 <f:selectItems value="#{entradaAlunosBBean.cidades}" />
									</h:selectOneMenu >
									<h:outputLabel value="CEP:"/>
									<h:inputText value="#{alunoBean.aluno.alu_cep}" size="5"/>
								</h:panelGrid><br/>
								<h:panelGrid columns="6">
									<h:outputLabel value="Tel. Res.:"/>
									<h:inputText value="#{alunoBean.aluno.alu_foneres}" size="10"/>
									<h:outputLabel value="Tel. Comercial:"/>
									<h:inputText value="#{alunoBean.aluno.alu_fonecom}" size="10"/>
									<h:outputLabel value="Celular:"/>
									<h:inputText  value="#{alunoBean.aluno.alu_fonecel}" size="10"/>
								</h:panelGrid><br/>
								<h:panelGrid columns="8">
									<h:outputLabel value="Sexo:"/>
										<h:form>
											<h:selectOneRadio >
												<f:selectItem itemLabel="Masculino" itemValue="M"/>
												<f:selectItem itemLabel="Feminino" itemValue="F" />
											</h:selectOneRadio>
										</h:form>
									<h:outputLabel value="Idade: "/>
									<h:inputText value="#{alunoBean.aluno.alu_idade}" size="1"/>
									<h:outputLabel value="Estado Civil:"/>
										<h:form>
											<h:selectOneRadio >
												<f:selectItem itemLabel="Solteiro" itemValue="S"/>
												<f:selectItem itemLabel="Casado" itemValue="C"/>
											</h:selectOneRadio>
										</h:form>
									<h:outputLabel value="e-Mail:"/>
									<h:inputText value="#{alunoBean.aluno.alu_email}" size="30"/>
								</h:panelGrid><br/>
								<h:panelGrid columns="8">
									<h:outputLabel value="Data Nascimento"/>
									<htm:p> 
										<t:inputCalendar value="#{alunoBean.aluno.alu_datanasc}"
												renderAsPopup="true"
												renderPopupButtonAsImage="true"
												popupButtonImageUrl="images/search-blue.gif" size="5"
												>
										</t:inputCalendar>
									</htm:p>
									<h:outputLabel value="Data Cadastro"/>
									<htm:p>
										<t:inputCalendar 
												renderAsPopup="true" value="#{alunoBean.aluno.alu_datacad}"
												renderPopupButtonAsImage="true"
												popupButtonImageUrl="images/search-blue.gif" size="5">
										</t:inputCalendar>
									</htm:p>
									<h:outputLabel value="Data Saida"/>
									<htm:p>
										 <t:inputCalendar 
												renderAsPopup="true" value="#{alunoBean.aluno.alu_datasaida}"
												renderPopupButtonAsImage="true"
												popupButtonImageUrl="images/search-blue.gif" size="5">
										</t:inputCalendar>
									</htm:p>
								</h:panelGrid><br/>
								<h:panelGrid columns="10">
									<h:outputLabel value="Peso: "/>
									<h:inputText value="#{alunoBean.aluno.alu_peso}" size="5"/>
									<h:outputLabel value="Altura: "/>
									<h:inputText value="#{alunoBean.aluno.alu_altura}" size="5"/>
									<h:outputLabel value="RG: "/>
									<h:inputText value="#{alunoBean.aluno.alu_rg}" size="10" />
									<h:outputLabel value="CPF: "/>
									<h:inputText value="#{alunoBean.aluno.alu_cpf}" size="10"/>
									<h:outputLabel value="Desconto: "/>
									<h:inputText value="#{alunoBean.aluno.alu_desconto}" size="5"/>
								</h:panelGrid><br/>
								<h:outputLabel value="Observação: "/>
								<h:inputTextarea  value="#{alunoBean.aluno.alu_obs}" cols="50" rows="5"></h:inputTextarea><br/>
							</h:form>
							<h:panelGrid columns="4" styleClass="panelGrid">
								<h:form>
									<h:commandButton action="#{alunoBean.salvarAluno}" value="Confirmar" styleClass="panelBotaoConfirmar"/>
									<h:commandButton id="alterarAluno" value="Alterar" styleClass="panelBotaoEditar"/>
									<h:commandButton id="consultarAluno" value="Consultar" styleClass="panelBotaoConsultar"/>
								</h:form>
								<h:panelGrid></h:panelGrid>
								<h:panelGrid></h:panelGrid>
								<h:panelGrid></h:panelGrid>
							</h:panelGrid>
			</htm:fieldset>
		</htm:div> <!-- /corpoEsquerda  -->
	</htm:div> <!-- /divPrincipal -->
</f:view>
</body>
</html>
A

Por acaso vc não mapeou seus beans no faces-config.xml??

Por exemplo, isso aqui:

&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;faces-config version="1.2" xmlns="http://java.sun.com/xml/ns/javaee"
 xmlns:xi="http://www.w3.org/2001/XInclude"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"&gt;
  
 &lt;managed-bean&gt;
  &lt;managed-bean-name&gt;testeBean&lt;/managed-bean-name&gt;
  &lt;managed-bean-class&gt;control.TesteBean&lt;/managed-bean-class&gt;
  &lt;managed-bean-scope&gt;session&lt;/managed-bean-scope&gt;
 &lt;/managed-bean&gt;
&lt;/faces-config&gt;
L

<?xml version="1.0" encoding="UTF-8"?> <faces-config version="1.2" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"> <managed-bean> <managed-bean-name>entradaAlunosBBean</managed-bean-name> <managed-bean-class>br.com.luxu.controller.entradaAlunosBackingBean</managed-bean-class> <managed-bean-scope>request</managed-bean-scope> </managed-bean> <managed-bean> <managed-bean-name>cityBean</managed-bean-name> <managed-bean-class>br.com.luxu.controller.AlunoBean</managed-bean-class> <managed-bean-scope>request</managed-bean-scope> </managed-bean> <managed-bean> <managed-bean-name>alunoBean</managed-bean-name> <managed-bean-class>br.com.luxu.controller.AlunoBean</managed-bean-class> <managed-bean-scope>request</managed-bean-scope> </managed-bean> <lifecycle> <phase-listener>br.com.luxu.controller.ListenerFasesJSF</phase-listener> </lifecycle> </faces-config>

A

isso!
Para testar troque nos dois mapeamentos:

&lt;managed-bean-scope&gt;request&lt;/managed-bean-scope&gt;

por:

&lt;managed-bean-scope&gt;session&lt;/managed-bean-scope&gt;

e me diz se funcionou

L

naum continua o erro do converter

X

vc ta usado hibernate ou JPA ??

A

Estranho… de noite testo o código pra ver o que está acontecendo! Agora vou pra casa :slight_smile:

L

Hibernate

A

Olá!!!
Andei fazendo uns testes aqui que funcionou!

Testa fazer isso, depois vc altera para o que precisa:
ClienteBean.java

import java.util.ArrayList;
import java.util.List;

import javax.faces.model.SelectItem;

public class ClienteBean {

	private List&lt;SelectItem&gt; selectItemsClientes;
	private int codigoClienteSelecionado;

	public void mostraCodigo(){
		System.out.println("Codigo: " + codigoClienteSelecionado);
	}
	
	public List&lt;SelectItem&gt; getSelectItemsClientes() {
		selectItemsClientes = new ArrayList&lt;SelectItem&gt;();
		selectItemsClientes.add(new SelectItem(1, "Andii"));
		selectItemsClientes.add(new SelectItem(2, "João"));
		selectItemsClientes.add(new SelectItem(3, "Maria"));
		return selectItemsClientes;
	}

	public void setSelectItemsClientes(List&lt;SelectItem&gt; selectItemsClientes) {
		this.selectItemsClientes = selectItemsClientes;
	}

	public int getCodigoClienteSelecionado() {
		return codigoClienteSelecionado;
	}

	public void setCodigoClienteSelecionado(int codigoClienteSelecionado) {
		this.codigoClienteSelecionado = codigoClienteSelecionado;
	}
}

index.jsp

&lt;%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%&gt;
&lt;%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%&gt;

&lt;html&gt;
&lt;f:view&gt;
	&lt;head&gt;
	&lt;title&gt;Clientes&lt;/title&gt;
	&lt;/head&gt;
	&lt;body&gt;
	&lt;h:form&gt;
		&lt;h:panelGrid columns="1"&gt;
			&lt;h:outputText value="SelectOneMenu com lista dinâmica" /&gt;
			&lt;h:selectOneMenu value="#{clienteBean.codigoClienteSelecionado}"&gt;
				&lt;f:selectItems value="#{clienteBean.selectItemsClientes}" /&gt;
			&lt;/h:selectOneMenu&gt;

			&lt;h:commandButton value="Enviar" action="#{clienteBean.mostraCodigo}" /&gt;
		&lt;/h:panelGrid&gt;
	&lt;/h:form&gt;
	&lt;/body&gt;
&lt;/f:view&gt;
&lt;/html&gt;

e lembre-se de mapear o bean no faces-config.xml com escopo de session

o resultado é impresso no console!
Testa ae…

L

nem aparece no console…parece q nem chama o metodo…estranho!

A

Você começou seu projeto do zero? Porque sinceramente não sei mais o que pode estar acontecendo! :?

L

bom estou seguindo uma video-aula e implmentando no meu sistema o q aprendo la…

Criado 6 de janeiro de 2011
Ultima resposta 7 de jan. de 2011
Respostas 24
Participantes 4