…galera como pego o ID de um selectItems, passo pro managedbeans pra salvar no banco?
Pegar o ID de um selectItems
24 Respostas
Se você quer pegar do selectItems e restaurar num objeto usa o converter
como assim?
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
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
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…
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
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 >
posta os seus beans para dar uma olhada
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�gina
}
public void alterarCidade(ActionEvent evt){
this.codigoCidade = null;
}
}
preciso ver de onde vem o entradaAlunosBBean.cidades…
e os escopos dos dois!
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;
}
}
e qual o escopo dos dois bean?
<?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>
Por acaso vc não mapeou seus beans no faces-config.xml??
Por exemplo, isso aqui:
<?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>testeBean</managed-bean-name>
<managed-bean-class>control.TesteBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
</faces-config>
<?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>
isso!
Para testar troque nos dois mapeamentos:
<managed-bean-scope>request</managed-bean-scope>
por:
<managed-bean-scope>session</managed-bean-scope>
e me diz se funcionou
naum continua o erro do converter
vc ta usado hibernate ou JPA ??
Estranho… de noite testo o código pra ver o que está acontecendo! Agora vou pra casa 
Hibernate
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<SelectItem> selectItemsClientes;
private int codigoClienteSelecionado;
public void mostraCodigo(){
System.out.println("Codigo: " + codigoClienteSelecionado);
}
public List<SelectItem> getSelectItemsClientes() {
selectItemsClientes = new ArrayList<SelectItem>();
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<SelectItem> selectItemsClientes) {
this.selectItemsClientes = selectItemsClientes;
}
public int getCodigoClienteSelecionado() {
return codigoClienteSelecionado;
}
public void setCodigoClienteSelecionado(int codigoClienteSelecionado) {
this.codigoClienteSelecionado = codigoClienteSelecionado;
}
}
index.jsp
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
<html>
<f:view>
<head>
<title>Clientes</title>
</head>
<body>
<h:form>
<h:panelGrid columns="1">
<h:outputText value="SelectOneMenu com lista dinâmica" />
<h:selectOneMenu value="#{clienteBean.codigoClienteSelecionado}">
<f:selectItems value="#{clienteBean.selectItemsClientes}" />
</h:selectOneMenu>
<h:commandButton value="Enviar" action="#{clienteBean.mostraCodigo}" />
</h:panelGrid>
</h:form>
</body>
</f:view>
</html>
e lembre-se de mapear o bean no faces-config.xml com escopo de session
o resultado é impresso no console!
Testa ae…
nem aparece no console…parece q nem chama o metodo…estranho!
Você começou seu projeto do zero? Porque sinceramente não sei mais o que pode estar acontecendo! :?
bom estou seguindo uma video-aula e implmentando no meu sistema o q aprendo la…