MSI K7T 266 PRO | AMD T-bird 1400Mhz 42 idle 49 stressed | 2 * 256 MB PC2100 DDR Major Major | 120 GB IBM Deskstar + 40 GB IBM Deskstar | TNT 2 M64 Gainward PCI | Pioneer DVD-106S | LiteOn LDW 401S @ 411S DVD +/- R(W) | Enlight 300 Watt| IIyama 19"
uuh, submitten naar een servletBladerer schreef op 10 augustus 2004 @ 16:07:
vraag is alleen hoe ga ik het formulier verwerken?
lijkt me logisch toch?
Neem je whisky mee, is het te weinig... *zucht*
Op het moment dat een formulier echter NIET bestaat uit een enkele set gegevens dan begint het probleem.
Normaal heb je een formulier in de zin van
Naam
Telefoon
en dan een button verzenden.
Aan de servlet kant haal je deze gegevens simpel op met
getAttribute("Naam")
getAttribute("Telefoon")
getAttribute("email")
Maar ziet een formulier nu als volgt uit (een formulier waarin je meerdere namen kan opvoeren/aanpassen):
Naam Telefoon email
Naam Telefoon email
Naam Telefoon email
en dan de button verzenden.
Waar het mij nu om gaat hoe ik aan de servlet kant dit formulier kan verwerken.
Mijn formulier ziet er uit zoals hierboven in de afbeelding staat.
[ Voor 4% gewijzigd door Bladerer op 10-08-2004 17:10 ]
MSI K7T 266 PRO | AMD T-bird 1400Mhz 42 idle 49 stressed | 2 * 256 MB PC2100 DDR Major Major | 120 GB IBM Deskstar + 40 GB IBM Deskstar | TNT 2 M64 Gainward PCI | Pioneer DVD-106S | LiteOn LDW 401S @ 411S DVD +/- R(W) | Enlight 300 Watt| IIyama 19"
Lijkt mij dat je dan die taak meeneemt in de benaming van je scherm attributen
Neem je whisky mee, is het te weinig... *zucht*
Voorbeeld?
Het probleem blijft bestaan dat wanneer je een formulier dynamisch opbouwd je in de servlet niet weet welke velden je kan verwachten.
Hoe doorloop ik dus mijn resultaten uit mijn formulier?
Hieronder een voorbeeld van zoals ik het in mijn hoofd heb:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| for (resultaten formulier){
TaakID = getAttribute("TaakId");
ProjectId = getAttribute("ProjectId");
Uren = getAttribute("Uren");
Omschrijving = getAttribute("Omschrijving");
if (TaakID||Uren niet gelijk aan TaakID||Uren in Bean){
if (TaakID||Uren in Bean niet gelijk aan "00:00:00")
sqlUpdate();
}
else{
sqlInsert();
}
}
} |
[ Voor 6% gewijzigd door Bladerer op 10-08-2004 17:28 ]
MSI K7T 266 PRO | AMD T-bird 1400Mhz 42 idle 49 stressed | 2 * 256 MB PC2100 DDR Major Major | 120 GB IBM Deskstar + 40 GB IBM Deskstar | TNT 2 M64 Gainward PCI | Pioneer DVD-106S | LiteOn LDW 401S @ 411S DVD +/- R(W) | Enlight 300 Watt| IIyama 19"
Eenvoudig... je moet dan hetvolgende doen:Bladerer schreef op 10 augustus 2004 @ 17:09:
Dat lijkt mij idd ook, dat doe ik ook altijd.
Op het moment dat een formulier echter NIET bestaat uit een enkele set gegevens dan begint het probleem.
Normaal heb je een formulier in de zin van
Naam
Telefoon
en dan een button verzenden.
Aan de servlet kant haal je deze gegevens simpel op met
getAttribute("Naam")
getAttribute("Telefoon")
getAttribute("email")
Maar ziet een formulier nu als volgt uit (een formulier waarin je meerdere namen kan opvoeren/aanpassen):
Naam Telefoon email
Naam Telefoon email
Naam Telefoon email
en dan de button verzenden.
Waar het mij nu om gaat hoe ik aan de servlet kant dit formulier kan verwerken.
Mijn formulier ziet er uit zoals hierboven in de afbeelding staat.
Naam_<identifierx> Telefoon_<identifierx> email_<identifierx>
Naam_<identifiery> Telefoon_<identifiery> email_<identifiery>
Naam_<identifierz> Telefoon_<identifierz> email_<identifierz>
Zo kan je ze allemaal uitlezen uit je request. Gewoon alle identiefiers afgaan.. (voorbeeldje van identifier is project_id)
The ships hung in the sky in much the same way that bricks don’t.
Een voorbeeld is altijd wel handig.
[ Voor 3% gewijzigd door Bladerer op 10-08-2004 17:40 ]
MSI K7T 266 PRO | AMD T-bird 1400Mhz 42 idle 49 stressed | 2 * 256 MB PC2100 DDR Major Major | 120 GB IBM Deskstar + 40 GB IBM Deskstar | TNT 2 M64 Gainward PCI | Pioneer DVD-106S | LiteOn LDW 401S @ 411S DVD +/- R(W) | Enlight 300 Watt| IIyama 19"
Verwijderd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
| private void getParamsFromPage(HttpServletRequest request) { String parameter, value, identifier; String prefixKey = "Naam_"; String prefix2 = "Telefooin_"; // walk through all page parameters Enumeration parameters = request.getParameterNames(); while (parameters.hasMoreElements()) { parameter = (String) parameters.nextElement(); // pick parameters starting with the special key prefix if (parameter.indexOf(prefixKey) == 0) { value = request.getParameter(parameter); // remove prefix identifier = parameter.substring(prefixKey.length()); // do something with value ... // build matching parameter name parameter = prefix2 + identifier; value = request.getParameter(parameter); // do something with value ... etc for other matching parameters } // if parameter starts with key prefix } // while walking through parameters } |
Samengevat, gewoon al je parameters aflopen, identifier eruit halen, dan bijbehorende parameters opvragen en allemaal lekker verwerken hoe jij dat wilt.
Zijn er nog voordelen om te kiezen voor één van de twee.
Mijn voorkeur gaat uit naar het gebruik van de tweede methode.
Het ontbreekt mij echter aan voldoende kennis om te weten hoe ik de arry aan de servlet kant weer kan oproepen. Hoe heet de array?
Kan iemand een voorbeeld geven hoe je die array opbouwd en vervolgens aanroept in de servlet?
De array zou dan bestaan uit de volgende onderdelen:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
| <FORM action="mijnsevlet" method="post" name="tijdschrijven">
<INPUT type="hidden" name="MedewrkrID" value="<%= ovli.getMedewerkerID %>">
<INPUT type="hidden" name="TaakID" value="<%= ovli.getTaakID %>">
<INPUT type="hidden" name="ProjectID" value="<%= ovli.getProjectID %>">
<INPUT type="text" name="Uren" size="20" value="<%= ovli.getUren %>">
<INPUT type="text" name="Omschrijving" size="20" value="<%= ovli.getOmschrijving %>">
<br />
<br />
<INPUT type="hidden" name="MedewrkrID" value="<%= ovli.getMedewerkerID %>">
<INPUT type="hidden" name="TaakID" value="<%= ovli.getTaakID %>">
<INPUT type="hidden" name="ProjectID" value="<%= ovli.getProjectID %>">
<INPUT type="text" name="Uren" size="20" value="<%= ovli.getUren %>">
<INPUT type="text" name="Omschrijving" size="20" value="<%= ovli.getOmschrijving %>">
<br />
<br />
<INPUT type="hidden" name="MedewrkrID" value="<%= ovli.getMedewerkerID %>">
<INPUT type="hidden" name="TaakID" value="<%= ovli.getTaakID %>">
<INPUT type="hidden" name="ProjectID" value="<%= ovli.getProjectID %>">
<INPUT type="text" name="Uren" size="20" value="<%= ovli.getUren %>">
<INPUT type="text" name="Omschrijving" size="20" value="<%= ovli.getOmschrijving %>">
<br />
<br />
<INPUT type="hidden" name="MedewrkrID" value="<%= ovli.getMedewerkerID %>">
<INPUT type="hidden" name="TaakID" value="<%= ovli.getTaakID %>">
<INPUT type="hidden" name="ProjectID" value="<%= ovli.getProjectID %>">
<INPUT type="text" name="Uren" size="20" value="<%= ovli.getUren %>">
<INPUT type="text" name="Omschrijving" size="20" value="<%= ovli.getOmschrijving %>">
</FORM> |
Alle veldnamen zijn dus het zelfde per regel.
De inhoud van de Hidden fields is echter altijd anders.
de drie hidden fields vormen samen de samengestelde sleutel.
[ Voor 85% gewijzigd door Bladerer op 11-08-2004 10:04 ]
MSI K7T 266 PRO | AMD T-bird 1400Mhz 42 idle 49 stressed | 2 * 256 MB PC2100 DDR Major Major | 120 GB IBM Deskstar + 40 GB IBM Deskstar | TNT 2 M64 Gainward PCI | Pioneer DVD-106S | LiteOn LDW 401S @ 411S DVD +/- R(W) | Enlight 300 Watt| IIyama 19"
Anders moet je ff de Java API docs er bij pakken en kijken hoe de meegestuurde parameters precies in de request verwerkt zitten.
Momenteel ben ik het volgende aan het uitwerken:
String MedewrkrID[] = request.getParameterValues(“MedewrkwID”)
deze array's doorloop ik dan weer met een for lus om ze weer samen te voegen of controlles op los te laten. Als ik wat verder ben zal ik de code posten zodra deze werkt, of als ik nog vragen heb. alvast bedankt
MSI K7T 266 PRO | AMD T-bird 1400Mhz 42 idle 49 stressed | 2 * 256 MB PC2100 DDR Major Major | 120 GB IBM Deskstar + 40 GB IBM Deskstar | TNT 2 M64 Gainward PCI | Pioneer DVD-106S | LiteOn LDW 401S @ 411S DVD +/- R(W) | Enlight 300 Watt| IIyama 19"
Voor elke request parameter mag er maar 1 zijn. (de laatste overschrijft de vorige).Bladerer schreef op 11 augustus 2004 @ 12:04:
Ik ben idd op de goede weg door gebruik van die array.
Momenteel ben ik het volgende aan het uitwerken:
String MedewrkrID[] = request.getParameterValues(“MedewrkwID”)
deze array's doorloop ik dan weer met een for lus om ze weer samen te voegen of controlles op los te laten. Als ik wat verder ben zal ik de code posten zodra deze werkt, of als ik nog vragen heb. alvast bedankt
Betekend dus dat:
[code]
<INPUT type="hidden" name="MedewrkrID" value="10">
<INPUT type="hidden" name="MedewrkrID" value="20">
[code]
en
1
| request.getParameter("MedewrkrID"); |
20 terug geeft...
Om je velden uniek te maken moet je de primaire sleutel van een rij gebruiken... Wat dus (volgens mij) neer komt op:
1
| <input name="uren_<%=ovli.getMedewerkerID%>_<%=ovli.getTaakID%>_<%=ovli.getProjectID%>".... |
waarmee je de parameter alsvolgt kan ophalen:
1
2
| request.getParameter("uren_" + <%=ovli.getMedewerkerID%> + "_" +
<%=ovli.getTaakID%> + "_" + <%=ovli.getProjectID%>"); |
suc6 ermee
The ships hung in the sky in much the same way that bricks don’t.
je mag toch ook arrays gebruiken?
dus iets als
1
2
| <INPUT type="hidden" name="MedewrkrID[]" value="10"> <INPUT type="hidden" name="MedewrkrID[]" value="20"> |
volgens mij krijg je dan als je MedewrkrID opvraagt een array of map van strings terug
Het wil echt met arrays hoor. Ik heb het zelf ook al eens gebruikt. Ik zoek de code nog wel even op.Standeman schreef op 11 augustus 2004 @ 18:44:
[...]
Voor elke request parameter mag er maar 1 zijn. (de laatste overschrijft de vorige).
Betekend dus dat:
[code]
<INPUT type="hidden" name="MedewrkrID" value="10">
<INPUT type="hidden" name="MedewrkrID" value="20">
[code]
en
code:
1request.getParameter("MedewrkrID");
20 terug geeft...
Om je velden uniek te maken moet je de primaire sleutel van een rij gebruiken... Wat dus (volgens mij) neer komt op:
code:
1 <input name="uren_<%=ovli.getMedewerkerID%>_<%=ovli.getTaakID%>_<%=ovli.getProjectID%>"....
waarmee je de parameter alsvolgt kan ophalen:
code:
1 2request.getParameter("uren_" + <%=ovli.getMedewerkerID%> + "_" + <%=ovli.getTaakID%> + "_" + <%=ovli.getProjectID%>");
suc6 ermee
Verwijderd
Natuurlijk bestaat de functiezneek schreef op 11 augustus 2004 @ 19:41:
[...]
Het wil echt met arrays hoor. Ik heb het zelf ook al eens gebruikt. Ik zoek de code nog wel even op.
1
| java.lang.String[] javax.servlet.ServletRequest.getParameterValues(java.lang.String) |
Met bovenstaande voorbeeld krijg je dan gewoon String[]{ "10", "20" } (notatie slaat op string array met 2 elementen) terug. Je hebt dan nog steeds niet de bijbehorende non-hidden parameters, plus dat de volgorde ook nog niet eens gegarandeerd is. Het kan dus ook { "20", "10" } zijn.
Als je dit doet, zul je dus nog steeds moeten concateneren; in eerste instantie deze IDs in de namen van je non-hidden fields encoderen, en in de 2de instantie aan de hand van de waardes in je array ( de 20 en 10 ), dynamisch de namen opbouwen van je non-hidden fields en deze dan expliciet requesten.
Dit komt hoe dan ook weer neer op de code example die ik al eerder postte. Het enige wat je je hier bespaart is dat je prefixKey niet uit de parameter naam hoeft te filteren, maar dan komt dan weer voor terug dat je hidden parameters moet toevoegen.
