<h:selectOneMenu> e <rich:datatable>

Olá galera boa tarde.
Sou novo aqui no forum e também estou trabalhando com JSF a apenas duas semanas.

Gostaria de saber se existe como preencher um datatable do richfaces com objetos que eu selecionei num selectOneMenu.

Explicando melhor: Eu tenho um selectOneMenu que é preenchido com alguns objetos e tenho um command button ao lado que ao ser pressionado ele pegará o item selecionado no selectOneMenu e passar para um rich:datatable que tenho logo abaixo.

Como eu disse sou novo no forum e qualquer coisa que eu tenha errado na hora de postar me deem um toque para que na próxima vez eu faça certo.

Obrigado a todos.

Abraços

Seja bem vindo ao fórum…

Bom, este combo que você está utilizando, serveria como se fosse um filtro para o dataTable?

Não, esse combo é uma lista de objetos que retornei de um banco que seriam “Atributos” e esse datatable vai servir para um novo cadastro onde os Atributos que o usuario deseja selecionar no combobox apareçam no datatable para na hora do novo cadastro eu recuperar todos os Atributos que o usuario selecionou.

Pessoal, pensei numa solução mas continuo precisando de ajuda.

Eu criei uma lista de Produtos onde essa lista será os objetos que vou carregar no meu datatable, mas agora meu problema é, como eu posso preencher essa lista onde eu tenho a combo e um a4j:commandButton “Adicionar” e quando eu clickar em Adicionar ele pegar o objeto que está selecionado na combo e adicionar na lista

Abraços

Eu faria assim.

Criaria um metodo na sua Action que seria chamado no botão.

Quando você selecionasse no combo e clica-se no botão. Eu faria o seguinte.

Adicionaria o registro selecionado em uma lista nova na sua action.

Excluiria o registro selecionado da lista do seu combo.

E retornaria o metodo para mesma pagina.

O seu dataTable seria suaAction.listaNova com os registros adicionados.

Se quiser um exemplo até consigo lhe montar um a noite.

Abraço

É exatamente isso que estou precisando fazer natureza, se você fizer o exemplo pra mim eu agradeceria muito.

Eu tentei fazer o que o natureza disse e não consegui, alguém tem um exemplo sobre isso para poder me ajudar?

Guenta ai.

:wink: Ja ja posto.

E ae fera é o seguinte…

Não consegui fazer um exemplo aqui web por falta de tempo mesmo…

Mas da pra ajudar.

É assim… você terá uma lista de produtos no qual será responsavel pelo preenchimento do seu combo.

Ai é o seguinte…

Classe Produto.java

Segue o código… [code]
public class Produto {

private Long id;

private String descricao;

public Long getId() {
	return id;
}

public void setId(Long id) {
	this.id = id;
}

public String getDescricao() {
	return descricao;
}

public void setDescricao(String descricao) {
	this.descricao = descricao;
}

}
[/code]

Classe Teste.java

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

public class Teste {

	public static void main(String[] args) {
		
                                //Esta lista será sua lista de produtos, que creio eu já está funcionando.
		List<Produto> listaProduto = new ArrayList<Produto>();

                                //Esta será sua lista de produtos adicionados que será a que você irá mostrar no dataTable.
		List<Produto> listaAdicionada = new ArrayList<Produto>();
		
                                //Só adicionei os produtos para realizar o teste.
		Produto prod1 = new Produto();
		prod1.setId(1L);
		prod1.setDescricao("Mouse Pad");
		listaProduto.add(prod1);
		
		Produto prod2 = new Produto();
		prod2.setId(2L);
		prod2.setDescricao("Notebook");
		listaProduto.add(prod2);
		
		Produto prod3 = new Produto();
		prod3.setId(3L);
		prod3.setDescricao("Processador");
		listaProduto.add(prod3);
		
                                //Este metodo será responsavel por adicionar na sua dataTable e remover da sua combo.
		for (Iterator iterator = listaProduto.iterator(); iterator.hasNext();) {
			Produto prod = (Produto) iterator.next();
                                                //Aqui no caso você vai verificar se o id ou descricao é a selecionada no combo.
			if(prod.getId().equals(2L)){
                                                                //Vai adicionar na lista nova.
				listaAdicionada.add(prod);
                                                                //Remover da lista antiga. Obs. Só conseguira remover se usar iterator.
				iterator.remove();
			}
		}
		//Só coloquei isto aqui para ver o resultado.
		for(Produto produtos : listaProduto){
			System.out.println("Produtos: " + produtos.getId() + " " + produtos.getDescricao());
		}
		//Só coloquei isto aqui para ver o resultado.
		for(Produto prod : listaAdicionada){
			System.out.println("Lista: " + prod.getId() + " " +  prod.getDescricao());
		}
	}
}

No caso é assim. Você vai ter o botão, quando clicar ele vai ter que ir para o for. Verificar atualizar as listas e voltar. Para isto usa o a4j:commandButton.

Ele tem uma opção chamda reRender que é para dar o refresh no seu formulário. Ai quando clicar ele executa a action e atualiza tanto combo quanto tabela.

Se quiser o exemplo todo tals eu posso fazer amanhã.

Caso tenha dúvida é só postar…

Ta meio simples e sem estruturação mas é para você entender o que deve ser feito.

Abraço espero ter ajudado.

Obrigado natureza, mas assim, eu tentei fazer isso, o meu único problema agora é assim:

Quando eu preencho um <h:selectOneMenu> são objetos do tipo SelectItem aí quando eu clicko no meu botão a4j:commandButton na action dele ele pegue o item selecionado na combobox que é do tipo SelectItem e passe a ser meu objeto que é do tipo Atributo para que eu possa inserir ele na minha lista que é renderizada no datatable.
Mas quando eu tou tentando fazer isso aqui tá dando um problema.

Sabe como posso fazer isso?

Posta ai seus codigos que eu dou uma olhada.

Vamos lá, vou te mostrar como está meu código resumido a parte que estou precisando…

Arquivo teste.xhtml

<h:selectOneMenu value="{#testeBean.item}">
<f:selectitems value="{#testeBean.preencheItems}" / >
</h:selectOneMenu}
<a4j:commandButton action="{#testeBean.adicionaLista}"} value="+" />

Arquivo TesteBean

private SelectItem item = new SelectItem();
private List atributos = new ArrayList();
private AtributoService atr = new AtributoService();

//Aqui ele preenche os objetos do combobox está funcionando perfeitamente…
public List preencheItems(){
List itens = new ArrayList();
try{
//Preenche os objetos do tipo atributo.
List atributosBD = atr.obterTodos();
for (Atributos atri : atributosBD) {
itens.add(new SelectItem(atri, atri.getDescricao()));
}
return itens;
}

//aqui que está o problema pois o objeto da combobox é do tipo SelectItem e eu quero que ele volte a ser um Atributo e não tenho idéia de como fazer isso.

public void adicionaLista(){
//Esse método eu quero preencher a lista de Atributos instanciada no inicio, onde essa lista que será carregada pela minha datatable
tem como eu fazer isso?
}

Como eu disse ficou muito resumido, mas é que estou sem o código original mas acho que dá para ter uma idéia de como é.

Obrigado e abraços

Pelo o que eu tou vendo eu precisarei utilizar um converter, mas não tenho idéia de como usar.

Alguém pode me ajudar nisso?

Abraços