Como transferir elementos de uma lista p/ outra, c/ JSF?

4 respostas
L

Colegas,
Tenho duas listas(lado a lado) em uma página:

Lista A						           Lista B	
  
  Carlos    botaoInsere (remove da Lista A e insere na Lista B)    Maria
  Joao      botaoRemove (remove da Lista B e insere na Lista A)
  Maria

Eu gostaria de transferir elementos de uma lista para outra…
Como fazer isto com JSF ?

Alguém teria um exemplo, link ou qualquer coisa ?

4 Respostas

muldon
Eu fiz esse componente em JSF, pois precisava exatamente dessa funcionalidade. Entao, eu fiz o seguinte: criei duas listas como atributos de classe tipo:

public ArrayList clientes;

public ArrayList selecionados;

Entao, ao clicar no botao adicionar pessoa, eu acionava um procedimento no backbean, que recebia como parametro o nome dessa pessoa e retirava ela da primeira lista e colocava na segunda. Como eu nao sabia como passava o id ao inves do nome, eu criei um metodo, tipo: searchByName(String nome, ArrayList lista, boolean remover) , onde se remover fosse true, ele retirava o elemento da lista e inseria na outra, global.
O mesmo acontecia com os botoes addAll e removeAll, so que com todos os elementos…
Nao sei se ajudou muito, mas so nao te dou mais detalhes pq nao lembro muito bem como implementei isso ha dois meses atras.

L

Muldon,
Pois eh, o meu problema ta em fazer passar o ID para o metodo.

Mas eu tinha chegado nessa mesma lógica que tu chegastes.

De qualquer forma, muito obrigado pela ajuda.

L

Opa,
Lá vai a solução:

No teu BackingBean:

private ArrayList listaDeSociosSemCarteira = new ArrayList();
    private ArrayList listaDeSociosSelecionados = new ArrayList();
    
    private String[] selectedListaDeSociosSemCarteira;
    private String[] selectedListaDeSociosSelecionados;

    // Getters e Setters.....

   // Daqui pra ca, os metodos que movimento os itens e o metodo que gera a lista.

public void moveTodos(ActionEvent actionEvent){
    	getListaDeSociosSelecionados().addAll(getListaDeSociosSemCarteira());
    	getListaDeSociosSemCarteira().clear();
    }
    public void removeTodos(ActionEvent actionEvent){
    	getListaDeSociosSemCarteira().addAll(getListaDeSociosSelecionados());
    	getListaDeSociosSelecionados().clear();
    }
    public void moveSelecionado(ActionEvent actionEvent){
    	String[] values = getSelectedListaDeSociosSemCarteira();
		int length = values.length;
		for (int i=0; i<length; i++) {
			String value = values[i];
			getListaDeSociosSelecionados().add(removeItem(value, getListaDeSociosSemCarteira()));
		}
    }
      public void removeSelecionado(ActionEvent actionEvent){
    	String[] values = getSelectedListaDeSociosSelecionados();
    	int length = values.length;
    	for (int i=0; i<length; i++) {
    		String value = values[i];
    		getListaDeSociosSemCarteira().add(removeItem(value, getListaDeSociosSelecionados()));
    	}
    }
    private SelectItem removeItem(String value, List items) {
		SelectItem result = null;
		int size = items.size();
		for (int i=0; i<size; i++) {
			SelectItem item = (SelectItem) items.get(i);
			if (value.equals(item.getValue())) {
				result = (SelectItem) items.remove(i);
				break;
			}
		}
		return result;
	}
    public void gerar(ActionEvent actionEvent){
    	List lista = mgr.getSociosSemCarteira();
    	ArrayList<SelectItem> listaSocios = new ArrayList<SelectItem>();    	
    	Iterator it = lista.iterator();
    	while ( it.hasNext()){
    		Socio socio= (Socio)it.next();
    		listaSocios.add(new SelectItem(socio.getId().toString(),socio.getNome()));    		
    	}
    	this.setListaDeSociosSemCarteira(listaSocios);    	
	}

Na página:

<h:form id="wizardCarteira">
		<div align="center">
			<h:commandButton value="#{messages['wizardCarteira.gerarRelacaoCarteira']}" actionListener="#{wizardCarteira.gerar}" id="gerar" immediate="true"/>
			<h:commandButton value="#{messages['wizardCarteira.imprimirRelacaoCarteira']}" actionListener="#{wizardCarteira.imprimirRelacaoCarteira}" id="imprimir"/>
		</div>
		<br/>
		<h:panelGrid columns="3" cellspacing="0" border="1">
			<h:selectManyListbox id="sociosSemCarteira" value="#{wizardCarteira.selectedListaDeSociosSemCarteira}" style="width: 250px;height: 250px;">
			   <f:selectItems value="#{wizardCarteira.listaDeSociosSemCarteira}"/>
			</h:selectManyListbox>
			<h:panelGrid columns="1">
				<h:commandButton value="#{messages['wizardCarteira.moveSelecionado']}" actionListener="#{wizardCarteira.moveSelecionado}" id="moveSelecionado" style="width: 30px;"/>
				<h:commandButton value="#{messages['wizardCarteira.removeSelecionado']}" actionListener="#{wizardCarteira.removeSelecionado}" id="removeSelecionado" style="width: 30px;"/>
				<h:commandButton value="#{messages['wizardCarteira.moveTodos']}" actionListener="#{wizardCarteira.moveTodos}" id="moveTodos" style="width: 30px;"/>
				<h:commandButton value="#{messages['wizardCarteira.removeTodos']}" actionListener="#{wizardCarteira.removeTodos}" id="removeTodos" style="width: 30px;"/>
			</h:panelGrid>
			<h:selectManyListbox id="sociosSelecionados" value="#{wizardCarteira.selectedListaDeSociosSelecionados}" style="width: 250px;height: 250px;">
			   <f:selectItems value="#{wizardCarteira.listaDeSociosSelecionados}"/>
			</h:selectManyListbox>
		</h:panelGrid>
	</h:form>
Kleber-rr

Java-Cachaça:
Opa,
Lá vai a solução:

No teu BackingBean:

private ArrayList listaDeSociosSemCarteira = new ArrayList();
    private ArrayList listaDeSociosSelecionados = new ArrayList();
    
    private String[] selectedListaDeSociosSemCarteira;
    private String[] selectedListaDeSociosSelecionados;

    // Getters e Setters.....

   // Daqui pra ca, os metodos que movimento os itens e o metodo que gera a lista.

public void moveTodos(ActionEvent actionEvent){
    	getListaDeSociosSelecionados().addAll(getListaDeSociosSemCarteira());
    	getListaDeSociosSemCarteira().clear();
    }
    public void removeTodos(ActionEvent actionEvent){
    	getListaDeSociosSemCarteira().addAll(getListaDeSociosSelecionados());
    	getListaDeSociosSelecionados().clear();
    }
    public void moveSelecionado(ActionEvent actionEvent){
    	String[] values = getSelectedListaDeSociosSemCarteira();
		int length = values.length;
		for (int i=0; i<length; i++) {
			String value = values[i];
			getListaDeSociosSelecionados().add(removeItem(value, getListaDeSociosSemCarteira()));
		}
    }
      public void removeSelecionado(ActionEvent actionEvent){
    	String[] values = getSelectedListaDeSociosSelecionados();
    	int length = values.length;
    	for (int i=0; i<length; i++) {
    		String value = values[i];
    		getListaDeSociosSemCarteira().add(removeItem(value, getListaDeSociosSelecionados()));
    	}
    }
    private SelectItem removeItem(String value, List items) {
		SelectItem result = null;
		int size = items.size();
		for (int i=0; i<size; i++) {
			SelectItem item = (SelectItem) items.get(i);
			if (value.equals(item.getValue())) {
				result = (SelectItem) items.remove(i);
				break;
			}
		}
		return result;
	}
    public void gerar(ActionEvent actionEvent){
    	List lista = mgr.getSociosSemCarteira();
    	ArrayList<SelectItem> listaSocios = new ArrayList<SelectItem>();    	
    	Iterator it = lista.iterator();
    	while ( it.hasNext()){
    		Socio socio= (Socio)it.next();
    		listaSocios.add(new SelectItem(socio.getId().toString(),socio.getNome()));    		
    	}
    	this.setListaDeSociosSemCarteira(listaSocios);    	
	}

Na página:

<h:form id="wizardCarteira">
		<div align="center">
			<h:commandButton value="#{messages['wizardCarteira.gerarRelacaoCarteira']}" actionListener="#{wizardCarteira.gerar}" id="gerar" immediate="true"/>
			<h:commandButton value="#{messages['wizardCarteira.imprimirRelacaoCarteira']}" actionListener="#{wizardCarteira.imprimirRelacaoCarteira}" id="imprimir"/>
		</div>
		<br/>
		<h:panelGrid columns="3" cellspacing="0" border="1">
			<h:selectManyListbox id="sociosSemCarteira" value="#{wizardCarteira.selectedListaDeSociosSemCarteira}" style="width: 250px;height: 250px;">
			   <f:selectItems value="#{wizardCarteira.listaDeSociosSemCarteira}"/>
			</h:selectManyListbox>
			<h:panelGrid columns="1">
				<h:commandButton value="#{messages['wizardCarteira.moveSelecionado']}" actionListener="#{wizardCarteira.moveSelecionado}" id="moveSelecionado" style="width: 30px;"/>
				<h:commandButton value="#{messages['wizardCarteira.removeSelecionado']}" actionListener="#{wizardCarteira.removeSelecionado}" id="removeSelecionado" style="width: 30px;"/>
				<h:commandButton value="#{messages['wizardCarteira.moveTodos']}" actionListener="#{wizardCarteira.moveTodos}" id="moveTodos" style="width: 30px;"/>
				<h:commandButton value="#{messages['wizardCarteira.removeTodos']}" actionListener="#{wizardCarteira.removeTodos}" id="removeTodos" style="width: 30px;"/>
			</h:panelGrid>
			<h:selectManyListbox id="sociosSelecionados" value="#{wizardCarteira.selectedListaDeSociosSelecionados}" style="width: 250px;height: 250px;">
			   <f:selectItems value="#{wizardCarteira.listaDeSociosSelecionados}"/>
			</h:selectManyListbox>
		</h:panelGrid>
	</h:form>

Eae amigo, blz?
Estou precisando de uma ajuda sua…
Estou tentando utilizar o selectManyListBox, mas apanhando feito vira lata… mas tudo bem.
Estive olhando seu exemplo, mas gostaria de saber como vc faz para salvar os objetos selecionados no selectManyListbox no banco.

Agradeço a ajuda.

Criado 24 de julho de 2006
Ultima resposta 12 de fev. de 2010
Respostas 4
Participantes 3