360 likes | 497 Views
Internetapplicaties. Deel 2: Gegevensinvoer: HTML-forms, JavaScript en JSP. Boeken/tutorials:. Beginning JSP Web Development, Wrox Vooral hfdst. 3 JavaScript By Example, QUE Google: online html tutorial …. Hoe passen de 3 elementen in elkaar ?. HTML-forms GUI-elementen voor de invoer
E N D
Internetapplicaties Deel 2: Gegevensinvoer: HTML-forms, JavaScript en JSP Internetapplicaties - II Gegevensinvoer
Boeken/tutorials: • Beginning JSP Web Development, Wrox • Vooral hfdst. 3 • JavaScript By Example, QUE • Google: online html tutorial • … Internetapplicaties - II Gegevensinvoer
Hoe passen de 3 elementen in elkaar ? • HTML-forms • GUI-elementen voor de invoer • Client-side JavaScript • Validatie (controle van ingevoerde gegevens) • Server-side • Validatie • Verwerking doorgestuurde geg. via JSP Dataverkeer moet beperkt blijven ivm de performantie Internetapplicaties - II Gegevensinvoer
HTML-form, algemeen • Electronisch invoerformulier • Via éénvoudige tags in een .html- of .jsp-pagina op te stellen • De gebruiker voert zijn gegevens in en kan dan: • Ofwel op SUBMIT duwen om de gevevens door te sturen van de client naar de server. • Ofwel op RESET duwen om de gegevens leeg te maken. • Zonder CGI, JSP e.d. hebben forms weinig zin. Alleen mailen van de data is dan zinvol. Internetapplicaties - II Gegevensinvoer
HTML-form • We zullen leren uit voorbeelden, die nadien worden verklaard. • U creëert folder en bestand: c:\jakarta-tomcat-4.1.27\webapps\hfdst2\Broodjes.html • U tikt de html-code die volgt in dit bestand in. Internetapplicaties - II Gegevensinvoer
HTML-form, code <html> <head> <title>Broodjes on-line</title> </head> <body> <form action=“verwerk.jsp” method=“post”> <i>Naam:</i><br> <i>Adres:</i><br> <i>Telefoon:</i><br> </form> </body> </html> Internetapplicaties - II Gegevensinvoer
HTML-form, code (vervolg) <form action=“verwerk.jsp” method=“post”> <i>Naam:</i> <input type=“text” name=“naam” size=“35”><br>… <i>Adres:</i> <input type=“text” name=“adres” size=“45”><br> <i>Telefoon:</i> <input type=“text” name=“telefoon” size=“45”><br><br> </form> Internetapplicaties - II Gegevensinvoer
U creëert de mappen: c:\jakarta-tomcat-4.1.27\webapps\hfdst2\WEB-INF(voor html-files volstaat deze folder) en hierbinnen: ..\WEB-INF\classes ..\WEB-INF\bin • Start/Run, Tik URL in: • http://localhost:8080/hfdst1/Broodjes.html OF • c:\jakarta-tomcat-4.1.27\webapps\hfdst2\Broodjes.html • Dit keer (html-file) maakt het niks uit of je via de URL (dus via de webserver) of vanuit je locale filesysteem werkt (dubbelklikken op het bestand volstaat nu). Internetapplicaties - II Gegevensinvoer
Resultaat form I: Internetapplicaties - II Gegevensinvoer
HTML-form, code (vervolg) … <form action=“verwerk.jsp” method=“post”> … ervoor: code van vorige slides <b>Levering:</b><br> <input name = "levering" type = "radio“ value = "Winkel"> Winkel <br> <input name = "levering" type = "radio“ value = "Thuis" checked> Thuis <br><br> <b>Bestelde broodjes:</b><br> <input type = "checkbox" name = "Soms Kaas“ Value = "Yes" >Smos Kaas<br> <input type = "checkbox" name = "Soms Hesp“ Value = "Yes" >Smos hesp<br><br> <input type = "submit" value = "Nu Bestellen"> </form> … Internetapplicaties - II Gegevensinvoer
Resultaat form II: Internetapplicaties - II Gegevensinvoer
Opmerkingen • action-attribuut van de form-tag: • bepaalt wat er moet gebeuren als de submit-knop wordt geactiveerd • Zal bij ons een jsp-bestand aanroepen. zie verder • method-attribuut van de form-tag: • get: de ingegeven data worden achteraan de URL-geplakt als volgt: • Verwerk.jsp?naam=niki+meulemans&adres=naamsevest+96 • post: de doorgegeven data zijn onzichtbaar • name-attribuut van diverse tags: • dient om naar de ingegeven invoer te kunnen verwijzen tijdens de verwerking door de jsp-code) Internetapplicaties - II Gegevensinvoer
Opmerkingen: radio-knop • De < input type = “radio” … >-control: • Bij elkaar horende radio-knoppen moetendezelfde naam dragen. Selecties sluiten elkaar dan uit. • Door checked te schrijven, is deze knop default geselecteerd • De value=“..” bepaalt de waarde tijdens de verwerking, maar is niet zichtbaar op de pagina <input name = "levering" type = "radio“ value = "Winkel"> Winkel <br> <input name = "levering" type = "radio“ value = "Thuis“ checked > Thuis <br><br> Internetapplicaties - II Gegevensinvoer
Opmerkingen: checkbox • De <input type = “checkbox” …>-control: • Bij elkaar horende checkboxen kunnendezelfde naam dragen • De value=“..” bepaalt de waarde tijdens de verwerking, maar is niet zichtbaar op de pagina <input type = "checkbox" name = "Soms Kaas“ Value = "Yes" >Smos Kaas<br> • In geval 2 checkboxen zelfde naam hebben & beide aangeklikt zijn: beide values woren doorgegeven: <input type = "checkbox" name = “Broodjes“ Value = “Kaas" >Smos Kaas<br> (NIET BIJ ONS !!!)<input type = "checkbox" name = “Broodjes“ Value = “Hesp" >Smos Hesp<br> (NIET BIJ ONS !!!) Internetapplicaties - II Gegevensinvoer
Extra controls: select-listbox, reset-knop … <b>Grootte</b><br> <select name = “grootte”> <option>piccolo/option> <option selected>half stokbrood</option> <option>heel stokbrood</option> </select><br><br> <input type = "submit" value = "Nu Bestellen"> <input type = “reset" value = “Defaults"> </form> … Internetapplicaties - II Gegevensinvoer
Resultaat form III: Internetapplicaties - II Gegevensinvoer
Opmerkingen: select • De <select>-control: • Geeft drop-down listbox of multi-select listbox. • Via <option>…</option>, verschillende keuzes aangeven • Er is 1 naam voor alle opties. • Door selected te schrijven, is deze option default geselecteerd. Internetapplicaties - II Gegevensinvoer
select (vervolg) • Multiple attribuut (niet in onze code) • Maakt keuze van verschillende opties tegelijk mogelijk (CTRL+klik) • In geval meer dan 1 keuze gemaakt is: beide values woren doorgegeven: <select name = “saus” multiple> <option>mosterd </option> (NIET BIJ ONS !!!) <option>ketchup </option> (NIET BIJ ONS !!!) </select ><br><br> Internetapplicaties - II Gegevensinvoer
select (vervolg) • value attribuut (niet in onze code) • Als die er is wordt de bebehorende value doorgegeven bij selectie. • Als die ontbreekt, wordt tekst tussen <option></option> doorgegeven bij selectie. • Belangrijk als je denkt dat de zichtbare tekst meer veranderlijk is dan de values <select name = “burgstaat” > <option value=“0” >getrouwd </option> <option value=“1” >alleenstaand </option> <option value=“2” >weduwe/naar</option> </select ><br><br> Internetapplicaties - II Gegevensinvoer
Opmerkingen: reset-knop • De <input type = “reset” …>-control: • Functie is vast bepaald: Leegmaken van de invoervelden • Value-attribuut geeft de tekst in de knop weer Internetapplicaties - II Gegevensinvoer
Java-Script, 1e kennismaking • Overzichtje: • JavaScript en Java als talen • JavaScript functie’s als validatie • In ons voorbeeldje • opmerkingen Internetapplicaties - II Gegevensinvoer
JAVA In .java-files of binnen 1 <%... >%> tag String str = “Hello; int i = 0; float netto(float bru,float tax){ return bru-tax; } JavaScript In .html/.jsp-files Binnen <script language=“JavaScript”>… </script> tags var str = “Hello”; var i = 0; function netto( bru,tax){ return bru-tax; } Java en JavaScript als talen Internetapplicaties - II Gegevensinvoer
JAVA public class Persoon{ public String naam = “Jef”; public int gebJaar = 1970; } Persoon p = new Persoon(); int i = p.gebJaar; String[] fruit = {“appel”,”peer”}; JavaScript function Persoon{ this.naam = “Jef”; this.gebJaar = 3; } var p = new Persoon(); var i = p.gebJaar; function rijtje{ return rijtje.arguments; }// héél vreemd var fruit = new rijtje(“appel”,”peer”); Java en JavaScript als talen Internetapplicaties - II Gegevensinvoer
JAVA General purpose Gecompileerd tot bytecode, sterk getypeerd Declaratie met type OO: klassen, overerving JavaScript Leeft binnen browserwereld Tekstueel geïnterpreteerd, zwak getypeerd Declaratie zonder type Bijna OO: eigenaardige object-creatie klasse=functie=array Java en JavaScript als talen Internetapplicaties - II Gegevensinvoer
JavaScriptfuncties als valdidatie … <head> <title>Broodjes on-line</title> <script language="JavaScript"> //HIER KOMT DE SCRIPT-CODE: function checkVeld(veld, benaming){ …} </script> </head> … //HIER WORDT DE SCRIPT-CODE AANGEROEPEN: <input type=“text” name=“naam” size=“35” onBlur='checkVeld(this,"naam")' > Internetapplicaties - II Gegevensinvoer
JavaScriptfuncties als valdidatie function checkVeld(veld, benaming){ if ( veld.value == "" ) alert(benaming + " moet ingevuld worden"); else if ( veld.value.length < 2 ) alert(benaming + " moet minstens 2 karakters hebben"); else return; veld.focus() ; return; } Internetapplicaties - II Gegevensinvoer
Resultaat JavaScript: Internetapplicaties - II Gegevensinvoer
Opmerkingen • Aanroep als gevolg van een event: <input type=“text” name=“naam” size=“35” onBlur='checkVeld(this,"naam")' > (vb: onBlur-event: gebeurt als de control uit focus is) • Gebruik van een speciale variabele om te verwijzen naar een element uit het html-document: this Internetapplicaties - II Gegevensinvoer
Opmerkingen • Ingebouwde objecten met properties (data-fields), gescheiden door een punt: if ( veld.value == "" ) • Objecten hebben ook methods: veld.focus() // dit object krijgt // de focus weer • N.B.: JavaScript is ook bruikbaar om dynamisch html te generen op de clientmachine. (zie later) Internetapplicaties - II Gegevensinvoer
JSP-verwerking • Tot nog toe konden we met de ingevoerde gegevens niets doen • N.B. Wat we nu hier zullen doen, hadden we ook in (door client zichtbare) JavaScript gekund. Internetapplicaties - II Gegevensinvoer
JSP-verwerking <html> <head> <title>Bestelde Broodjes</title> </head> <body> <i>Bestelde broodjes van:</i><br> <% out.println(request.getParameter("naam")); %> </body> </html> Internetapplicaties - II Gegevensinvoer
JSP-verwerking <% out.println(request.getParameter("naam" )); %> <% out.println(“ “ + request.getParameter(“voornaam" )); %><br> <% out.println(request.getParameter("adres")); %><br> Tel: <% out.println(request.getParameter("telefoon")); %><br><br> … Internetapplicaties - II Gegevensinvoer
JSP-verwerking <i>Levering:</i><br> <% out.println(request.getParameter("levering")); %><br><br> <i>Beleg:</i><br> Kaas ? <% out.println(request.getParameter("Smos Kaas")); %><br> Hesp ? <% out.println(request.getParameter("Smos Hesp")); %><br><br> <i>Grootte:</i><br> <% out.println(request.getParameter("grootte")); %><br> </body> Internetapplicaties - II Gegevensinvoer
Resultaat Internetapplicaties - II Gegevensinvoer
Opmerkingen • <% out.println(request.getParameter("naam")); %> • request-object is impliciet (is al gecreëerd) • type is de klasse HttpServletRequest • 1 van de methodes: getParameter() • geeft de value bij de gegeven naam terug Internetapplicaties - II Gegevensinvoer
Opmerkingen • Ook mogelijk: opvang van meerdere waarden tegelijk, horend bij name/value pairs die zelfde naam dragen. (niet bij ons) • Opvang in array van Strings via getParameterValues() • Vb: <% String[] sauzen = request.getParameterValues(“saus")); out.println(sauzen[1]);… %> Internetapplicaties - II Gegevensinvoer