Toon posts:

[struts/J2EE] Collectie komt niet goed gesorteerd binnen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een probleem waar ik na 2.5 dag nog niet uit kan komen.

Ik werk met struts en heb het volgende probleem.

Een JSP maakt dynamisch (via javascript elementen toevoegen aan DOM) formulier objecten aan. Deze moeten dus naar de action toe. De waarden van deze gegevens zet ik met de post in een array.

Op zich gaat dat goed maar nu krijg ik hele vage invoer.

Stel je voor ik heb 7 textvelden en voer {1,2,3,4,5,6,7} in dan bevat de collectie {1,6,2,3,7,4,5}.

Het is van mij van groot belang dat de invoer (is gewoon text) op dezelfde volgorde binnen komt als ingevoerd. Na het testen van verschillende aantallen velden met invoer zit er wel enige structuur in de ongesorteerde reeks. Het lijkt wel of hij intern ergens een boom gebruikt ofzo???

Ik heb al heel veel verschillende collection types (oa. ArrayList, LinkedList) gebruikt maar allemaal geven ze hetzelfde probleem.

Heeft iemand een oplossing voor mijn probleem?

Verwijderd

sortering kan je niet oplossen op deze manier Strust gebruikt intern een Set... wat je kan doen is de position mee posten bijvoorbeeld

"item1postion1"
"item2postion2"

of er een 'id' aanhangen bijvoorbeeld

"id=1 text=sghsgshgshgs"
"id=2 text=sghsgshgshgs"

Een andere oplossing is door text veld voor text veld te posten... dan weet jij tenminste altijd welk text veld je binnen krijgt

Verwijderd

Topicstarter
Bedankt voor je reactie.

Helaas is me nog niet helemaal duidelijk hoe je dat met je voorbeelden nu precies bedoeld. Allemaal 1 voor 1 posten is geen optie.

  • momania
  • Registratie: Mei 2000
  • Laatst online: 18:04

momania

iPhone 30! Bam!

Je kan je input toch zelf sorteren? Of zie ik dat verkeerd? Post je alleen maar waardes anders dan de getallen uit je voorbeeld? Dus String values dus oid?

Je kan altijd een id mee posten en zorgen dat je input in een map komt. :)

In je form moet je dan iets hebben als:
Java:
1
2
3
4
5
private Map indexedInput = new TreeMap();

public void setInput(Object key, Object value) {
    this.indexedInput.put(Integer.parseInt(String.valueOf(key)), String.valueOf(value));
}


In je jsp moet je dan de property die je als input gebruikt voorzien van een id en zorgen dat deze ge-post wordt naar deze method.
Dit kan je op de volgende manier doen:

HTML:
1
2
<html:text name="index(1)"/>
<html:text name="index(2)"/>

Dit zorgt ervoor dat de method in je form wordt aangeroepen en de 1, 2, etc als key mee geeft, en de waarde van de input als value.

De TreeMap zorgt ervoor dat de data gesorteerd wordt op basis van de key :)

Neem je whisky mee, is het te weinig... *zucht*


Verwijderd

Topicstarter
Een vergelijkbare functionaliteit heb ik ook al twee dagen lang geprobeert maar werkt niet zoals verwacht.

Ik heb het nu inmiddels opgelost door:
Een HashMap te gebruiken in mijn Form en de key, omgezet naar Integer, te gebruiken als key. In de action haal ik nu de keyset van de map en ga deze sorteren. Vervolgens iterate ik door deze gesorteerde set en haal de objecten(Strings) er bij.

Bedankt voor jullie (poging tot) hulp,

Jasper