Recuperar itens de um combobox - Java Server Faces

1 resposta
insuportavel

Bom dia pessoal.

Estou trabalhando com java server faces e me surgiu uma terrível duvida que esta me fazendo cair em contradição e me deixando meio confuso.

Em uma aplicação eu tenho um cadastro de usuarios onde eu seleciono em um combobox a empresa na qual este usuario esta trabalhando, e no momento em que eu faço esta seleção eu estou fazendo uma referencia a um objeto que esta sendo usado na camada “view” e faço um bindig direto para eleentão:

UsuarioHandler:

protected HtmlSelectOneMenu empresaSelecionada;
	
	public HtmlSelectOneMenu getEmpresaSelecionada() {
		return empresaSelecionada;
	}

	public void setEmpresaSelecionada(HtmlSelectOneMenu empresaSelecionada) {
		this.empresaSelecionada = empresaSelecionada;
	}

e no cadastroDeUsuarios.jsp:

<h:outputText value="Empresa"/>	
<h:selectOneMenu binding="#{UsuarioHandler.empresaSelecionada}">
	<f:selectItems value="#{UsuarioHandler.empresasParaComboBox}"/>
</h:selectOneMenu>

Pego o valor do combobox desta maneira:

int empresaEscolhida = Integer.parseInt(usuarioHandler.empresaSelecionada.getValue().toString());
Empresa emp = empresaHandler.getDaoListaDeEmpresas().get(empresaEscolhida-1);

Tudo esta funcionando, eu seleciono uma empresa e qdo eu aciono o botão que faz o cadastro do usuario ele pega o id da empresa e pronto, manda as informações para o banco de dados, um processo normal.

Oque me deixa confuso é o seguinte.
Se eu tenho uma classe resposavel por representar um usuario e suas ações, seria correto eu chamar a referencia para a empresa de uma classe que representasse a empresa e não usuario certo?

Estou tendo dificuldades para resolver esta situação.

Alguem poderia me dar uma ajuda por favor?

1 Resposta

casmeiron

Bom dia Marcelo,

Vejo que você está usando a opção “binding”, que mapeia o objeto faces à um objeto do seu bean. Com essa abordagem, você pode, por exemplo, adicionar diretamente os objetos no seu combobox, mas a gente nao costuma muito usar esse tipo de coisa (salvo algumas exceções).

Então como eu expliquei, o atributo “binding” dos componentes relaciona um objeto da camada view a um objeto da camada controller ( ou managed-bean layer).

O que você poderia fazer é o seguinte:

// bean
       private Empresa empresaSelecionada;
 	
 	public Empresa getEmpresaSelecionada() {
 		return empresaSelecionada;
 	}
 
 	public void setEmpresaSelecionada(Empresa empresaSelecionada) {
 		this.empresaSelecionada = empresaSelecionada;
 	}


// view
<h:outputText value="Empresa"/>	
 <h:selectOneMenu value="#{UsuarioHandler.empresaSelecionada}">
 	<f:selectItems value="#{UsuarioHandler.empresasParaComboBox}"/>
 </h:selectOneMenu>

Veja a diferença, nós não mapeamos o objeto em si (da camada view) para a camada do bean, apenas falamos que quando uma opção for selecionada, o objeto “empresaSelecionada” vai conter o valor selecionado, para seu caso acho que vai ser mais faicl.

Outra coisa, você falou de estar tratando empresa no UsuarioHandler, isso não é um problema (já que o UsuarioHandler deveria cuidar das coisas do Usuário, e se uma empresa diz respeito a ele, você pode sim deixar a empresa lá).

Dê uma olhada na documentação do faces para saber quando usar o “binding”, isso pode ajudar futuramente.

Espero ter ajudado, flwz :slight_smile:

Criado 5 de fevereiro de 2007
Ultima resposta 6 de fev. de 2007
Respostas 1
Participantes 2