Manipulação do Select Item no JSF

6 respostas
L

Ola Pessoal,

Gostaria de esclarecer umas duvidas minhas sobre Select Item, meu problema é meio grande portanto vou tentar detalhar um pouco afim de deixar claro para vcs, um dos meus exemplos é o seguinte:

Tenho 4 classes(FuncionarioBean, SexoBean, FuncionarioMB, SexoMB), 1 BD(Access), 1 tela(JSF+ RichFaces + Ajax)

//FuncionarioBean.java

public class FuncionarioBean{

private int codigo;
 private String nome;
 private long RG;
 private String endereco;
 private Date data_nascimento;
 private int cod_sexo;

 //métodos getters and setters;

}

//SexoBean.java

public class SexoBean{

private int codigo;
private String nome;

//métodos getters and setters;

}

//FuncionarioMB.java

import java.sql.SQLException;

import java.util.ArrayList;

import java.util.List;

import javax.faces.model.SelectItem;

public class FuncionarioMB {

private DBAccessDAO db = new DBAccessDAO();
private List<FuncionarioBean> funcionarios = new ArrayList<FuncionarioBean>();
private FuncionarioBean func;

public FuncionarioMB() throws SQLException{
	
	func = new FuncionarioBean();
	funcionarios.clear();
	
	db.conectar();
	funcionarios = db.consultaAllFunc();
	db.desconectar();
}


public DBAccessDAO getDb() {
	return db;
}


public void setDb(DBAccessDAO db) {
	this.db = db;
}


public List<FuncionarioBean> getFuncionarios() {
	return this.funcionarios;
}

public void setFuncionarios(List<FuncionarioBean> funcionarios) {
	this.funcionarios = funcionarios;
}

public FuncionarioBean getFunc() {
	return this.func;
}

public void setFunc(FuncionarioBean func) {
	this.func = func;
}

public List<SelectItem> getAllFuncionarios() throws SQLException {
	final List<SelectItem> listaComboBoxFunc = new ArrayList<SelectItem>(0);
	db.conectar();
	funcionarios.clear();
	funcionarios = db.consultaAllFunc();
	listaComboBoxFunc.add(new SelectItem(0, "Selecione"));
	for (int i = 1; i <= funcionarios.size(); i++) {
		SelectItem item = new SelectItem();
		item.setLabel(funcionarios.get(i -1).getNome());
		item.setValue(funcionarios.get(i -1).getCodigo_func());
		listaComboBoxFunc.add(item);
	}

	db.desconectar();

	return listaComboBoxFunc;

}

}

//SexoMB.java

import java.sql.SQLException;

import java.util.ArrayList;

import java.util.List;

import javax.faces.model.SelectItem;

public class SexoMB {

private DBAccessDAO db = new DBAccessDAO();
private List<SexoBean> sexos = new ArrayList<SexoBean>();
private SexoBean sexo;

public SexoMB() throws SQLException{
	
	sexo = new SexoBean();
	sexos.clear();
	
	db.conectar();
	sexos = db.consultaAllSexo();
	db.desconectar();
}

public DBAccessDAO getDb() {
	return db;
}

public void setDb(DBAccessDAO db) {
	this.db = db;
}

public List<SexoBean> getSexos() {
	return sexos;
}

public void setSexos(List<SexoBean> sexos) {
	this.sexos = sexos;
}

public SexoBean getSexo() {
	return sexo;
}

public void setSexo(SexoBean sexo) {
	this.sexo = sexo;
}

public List<SelectItem> getAllSexos() throws SQLException {
	final List<SelectItem> listaComboBoxSexos = new ArrayList<SelectItem>(0);
	db.conectar();
	sexos.clear();
	sexos = db.consultaAllSexo();
	listaComboBoxSexos.add(new SelectItem(0, "Selecione"));
	for (int i = 1; i <= (sexos.size()); i++) {
		SelectItem item = new SelectItem();
		item.setLabel(sexos.get(i -1).getNome());
		item.setValue(sexos.get(i -1).getCodigo());
		listaComboBoxSexos.add(item);
	}

	db.desconectar();

	return listaComboBoxSexos;

}

}

  • Bem agora vem minha duvida, eu tenho uma tela JSF, eu quero adicionar um novo Funcionario, nessa tela terá uma Combobox com os sexos que é puxado assim, value="#{SexoMB.AllSexos}", eu quero saber como eu vou conseguir associar esse codigo(PK) da tabela Sexos, com o cod_sexo(FK) da tabela Funcionarios, para que eu possa adicionar um Funcionario na tabela do Banco de Dados.

  • Isso vem me incomodando tanto, gostaria que voces pudessem me ajudar, se quiserem vcs podem mandar sugestões de melhora no meu código se acharem alguma coisa, sabe?
    Sou principiante e deve ter alguns erros, sei la.

Agradeço a todos desde ja que me ajudarem.

Obrigado

Att,

lymoreira.

6 Respostas

A

cara,

se vc tem o id do Sexo, vc vai ter que fazer uma pesquisa no banco com esse id, para pegar o objeto e associar ao seu objeto Funcionario.

t+

R

Precisa mesmo uma consulta ao BD só pra isso?

Pq não fazer simplesmente:

&lt;h:selectOneMenu&gt;
    &lt;f:selectItem itemLabel="Masculino" itemValue="1"/&gt;
    &lt;f:selectItem itemLabel="Feminino" itemValue="2"/&gt;
&lt;/h:selectOneMenu&gt;
L

Sim, eu acho q como Sexo nunca vai ter mais do que dois acho que posso deixar ja pré-definido os valores e armazenar direto no atributo do “cod_sexo” na classe FuncionarioBean.

Mais e se eu tiver uma atributo numa comboBox que pode ser dinamica, ou seja, eu cadastro uma nova atividade por exemplo, essa atividade vai para o final da comboBox mais eu não vou saber pegar o id dela se deixar a combo pré- definida, então eu queria saber o q eu faço neste caso?

meu SELECT ITEM da classe AtividadesBean.java segue abaixo:

public List<SelectItem> getAllAtividades() throws SQLException {
		final List<SelectItem> listaComboBoxAtiv = new ArrayList<SelectItem>(0);
		db.conectar();
		atividades.clear();
		atividades = db.consultaAllAtividades();
		listaComboBoxAtiv.add(new SelectItem(0, "Selecione"));
		for (int i = 1; i <= (atividades.size()); i++) {
			SelectItem item = new SelectItem();
			item.setLabel(atividades.get(i -1).getNome());
			item.setValue(atividades.get(i -1).getCodigo());
			listaComboBoxAtiv.add(item);
		}

		db.desconectar();

		return listaComboBoxAtiv;

	}

e eu quero colocar esse id da AtividadeBean.java de alguma forma no id de cod_atividade do FuncionarioBean.java, para ou fazer uma consulta especifica, ou cadastrar horas para funcionario de acordo com uma determinada atividade, vcs entenderão?

se eu não fui claro em alguma parte da explicação, é só me perguntar q eu explico melhor, ta.

vlw, galera.

R

Ai nesse caso sim vc pega dinamicamente.

&lt;h:selectOneMenu converter="entityConverter" value="#{objeto}"&gt;
   &lt;f:selectItem itemLabel="Selecione" itemValue=""/&gt;
   &lt;f:selectItems value="#{bean.lista}"&gt;
&lt;/h:selectOneMenu&gt;
public List&lt;SelectItem&gt; getLista(){
 //popula lista
}

Dê também uma olhada nesses 2 links abaixo,são bastante uteis:
http://www.rponte.com.br/2008/07/26/entity-converters-pra-da-e-vender/
http://www.rponte.com.br/2008/02/01/selectonemenu-converter-erro-de-validacao/

A

cara,

vc pode fazer uma pesquisa ou um merge, pois se não o objeto sexo nao vai ser uma entidade persistente, entao com isso vai dar pau.

t+

L

Eu queria um exemplo de como fazer isso, tem como?

Obrigado.

Criado 31 de outubro de 2011
Ultima resposta 31 de out. de 2011
Respostas 6
Participantes 3