[JSP & SERVLETS] formulier van meerdere rowsets

Pagina: 1
Acties:

  • Bladerer
  • Registratie: September 2001
  • Laatst online: 29-04-2025
Goede dag,

Ik zit met het volgende probleem.
Voor een tijdschrijfsysteem ben ik in JSP een webinterface aan het bouwen.
Voor het schrijven van uren krijgt de gebruiker een overzicht van al zijn projecten en bijbehorende taken + een invoerveld voor de uren en de omschrijving.

zo iets ziet er als volgt uit:
Afbeeldingslocatie: http://www.steijlen.com/sql/invoer.gif

De vraag is alleen hoe ga ik het formulier verwerken?
Kan iemand mij hier een hint in de juiste richting geven?

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"


  • momania
  • Registratie: Mei 2000
  • Laatst online: 21-05 06:42

momania

iPhone 30! Bam!

Bladerer schreef op 10 augustus 2004 @ 16:07:
vraag is alleen hoe ga ik het formulier verwerken?
uuh, submitten naar een servlet :?

lijkt me logisch toch?

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


  • Bladerer
  • Registratie: September 2001
  • Laatst online: 29-04-2025
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
email

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"


  • momania
  • Registratie: Mei 2000
  • Laatst online: 21-05 06:42

momania

iPhone 30! Bam!

Die uren en omschrijving zitten aan een taak gekoppeld...

Lijkt mij dat je dan die taak meeneemt in de benaming van je scherm attributen :)

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


  • Bladerer
  • Registratie: September 2001
  • Laatst online: 29-04-2025
Nee lijkt mij niet duidelijk.
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:

code:
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"


  • Standeman
  • Registratie: November 2000
  • Laatst online: 10:51

Standeman

Prutser 1e klasse

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
email

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.
Eenvoudig... je moet dan hetvolgende doen:


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.


  • Bladerer
  • Registratie: September 2001
  • Laatst online: 29-04-2025
Dat klinkt als een interesante oplossing, alleen snap ik nog niet helemaal wat je bedoelt. Kan je misschien in iets meer detail aangeven hoe zo iets in code <form> en aan de servlet kant eruit zou moeten zien.

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

Iets in de zin van:

Java:
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. :)

  • zneek
  • Registratie: Augustus 2001
  • Laatst online: 08-02-2025
Als je je form opbouwt met alle velden van hetzelfde type dezelfde naam, dan kun je in 1 keer arrays van waarden terug toveren. Zet per row een identificerende kolom (hidden field met een primary key oid) en je kunt door simpel door het array heen te itereren alle waarden terug toveren.

  • Bladerer
  • Registratie: September 2001
  • Laatst online: 29-04-2025
De twee bovengenoemde methodieken zien er goed uit.
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:

code:
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"


  • zneek
  • Registratie: Augustus 2001
  • Laatst online: 08-02-2025
Als het goed is krijg je als je request.getParameter("MedewrkID") opvraagt een map terug. Hier zitten alle waarden van MedewrkrID die op het form aanwezig waren.

Anders moet je ff de Java API docs er bij pakken en kijken hoe de meegestuurde parameters precies in de request verwerkt zitten.

  • Bladerer
  • Registratie: September 2001
  • Laatst online: 29-04-2025
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

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"


  • Standeman
  • Registratie: November 2000
  • Laatst online: 10:51

Standeman

Prutser 1e klasse

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

code:
1
<input name="uren_<%=ovli.getMedewerkerID%>_<%=ovli.getTaakID%>_<%=ovli.getProjectID%>"....


waarmee je de parameter alsvolgt kan ophalen:
code:
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.


  • nxt
  • Registratie: November 2001
  • Laatst online: 04-02 09:36

nxt

je mag toch ook arrays gebruiken?

dus iets als
code:
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

  • zneek
  • Registratie: Augustus 2001
  • Laatst online: 08-02-2025
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:
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:

code:
1
<input name="uren_<%=ovli.getMedewerkerID%>_<%=ovli.getTaakID%>_<%=ovli.getProjectID%>"....


waarmee je de parameter alsvolgt kan ophalen:
code:
1
2
request.getParameter("uren_" + <%=ovli.getMedewerkerID%> + "_" + 
    <%=ovli.getTaakID%> + "_" + <%=ovli.getProjectID%>");



suc6 ermee :)
Het wil echt met arrays hoor. Ik heb het zelf ook al eens gebruikt. Ik zoek de code nog wel even op.

Verwijderd

zneek 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.
Natuurlijk bestaat de functie
Java:
1
java.lang.String[] javax.servlet.ServletRequest.getParameterValues(java.lang.String) 
, maar dat is toch helemaal niet wat je hier wil?

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.
Pagina: 1