Olá, estou com um problema em começar uma certa implementação.
O problema é o seguinte:
Preciso criar uma pagina que traga os valores de uma tabela (através de uma lista de objetos) e com esses valores organizados em lista na minha JSP, eu selecionaria um objeto e clicaria em uma opção de “Descer Um” ou “Subir Um”, assim mudando a posição do objeto na lista. Depois confirmaria minha lista e essa nova ordems eria salva na tabela.
Um conhecido disse para usar JList, mas isso é para desktop, minha aplicação é web. Vocês teriam alguma dica de por onde começar, ou qual API utilizar?
[Resolvido]
Consegui, utilizei javascript para mudar a posição dos elementos na pagina e no momento do submit eu pego todos os values(onde estão os entityId dos elementos) e coloco todos em uma string e envio para a classe.
Na classe passo um StringTokenizer e armazeno eles em um Array, depois faço um For para procurar no banco e setar um atributo chamado Ordem de acordo com a posição do elemento no Array.
Vc simplesmente coloca um campo Ordem no bean que estiver usando. coloca todos os beans numa lista (List, como ArrayList) e manda ordenar com Collections.sort() .Terá que criar um comparador que use o campo ordem para estabelecer a ordem.
Bom pelo o que eu entendi você precisa mover esse elemento uma posição para cima ou para baixo na lista certo?
Acho que isso pode resolver seu problema:
private void move(Elemento e, int dir) { //dir seria +1 ou -1 para cima ou baixo na lista
int i = suaLista.indexOf(e); //pega o indice da posição está o elemento selecionado
if (i < 0 ) {
return;
}
suaLista.remove(e); // remove ele dessa posição ps: isso já vai remontar as posições na lista
suaLista.add(i + dir, e); // adiciona na posição + ou - 1
}
Conseguir atraves de javascript fazer os elementos se moverem pela lista na jsp.
<script type="text/javascript">
function addOption(selec, val, tex) {
var opt = document.createElement('option');
opt.value = val;
opt.text = tex;
try { selec.add(opt, null); } // NS/FF
catch(e) { selec.add(opt); } // IE
}
function moveUP(selec) {
var aux;
var ind;
if((selec.selectedIndex!=0) && (selec.selectedIndex!=null)){
for(var i = 0; i < selec.options.length; i++) {
if(selec.selectedIndex == i){
aux = selec.options[i-1].innerHTML;
selec.options[i-1].innerHTML = selec.options[selec.selectedIndex].innerHTML;
selec.options[i].innerHTML = aux;
ind = i-1;
}
}
selec.selectedIndex = ind;
}
}
function moveDOWN(selec) {
var aux;
var ind;
if((selec.selectedIndex!=(selec.options.length-1)) && (selec.selectedIndex!=null)){
for(var i = 0; i < selec.options.length; i++) {
if(selec.selectedIndex == i){
aux = selec.options[i+1].innerHTML;
selec.options[i+1].innerHTML = selec.options[selec.selectedIndex].innerHTML;
selec.options[i].innerHTML = aux;
ind = i+1;
}
}
selec.selectedIndex = ind;
}
}
</script>
A dica do daniel é para usar na action, mas minha duvida é como vou pegar na action essa nova ordenação? Usando a dica do sergio, vou criar um campo Ordem no BO, e cada vez que mover um objeto na lista eu teria que mudar esse campo. Mas como farei isso? Ou como vou passar essa nova ordenação para a action?
É você teria que dar um refresh na lista pra força-a a atualizar seus valores de acordo com os novos, normalmente um ajax acionado no evento do + ou - pra subir ou descer o elemento na lista.
Mas beleza, se você conseguiu fazer não se esqueça de colocar [RESOLVIDO] no tópico!