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 ?
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>