完全なプロジェクト: LINK TO PROJECT
したがって、JSP ファイルの 4 つの入力フィールドを検証する必要がある次のコードがありますが、正しく機能しません。
最初の入力フィールドをチェックするだけで、最初の入力フィールドに正しく入力すると、フォームが通過して送信されます。コードでは、最初の 2 つの入力フィールドに対して if else if.. を作成しました。naam と straatnaam:
UserValidator.java:
public class UserValidator {
private static final String USERNAME_PATTERN = "[a-zA-Z]{3,10}";
private static final String STRAAT_PATTERN = "[a-zA-Z]{3,50}";
private static final String PLAATS_PATTERN = "[a-zA-Z]{3,50}";
private static final String HUISNUMMER_PATTERN = "([0-9]){1,}([a-z]){0,3}";
List<String> errors = new ArrayList<String>();
public List<String> validate(UserForm userForm) {
String naam = userForm.getName();
String straatnaam = userForm.getName();
if (naam == null || naam.trim().isEmpty()) {
errors.add("User must have a name");
} else if (straatnaam == null || straatnaam.trim().isEmpty()) {
errors.add("Straatnaam must have a name");
} else {
if (!this.validUsername(naam)) {
errors.add("Naam: must be 3 to 10 characters a-zA-Z");
} else if (!this.validStraatnaam(straatnaam)) {
errors.add("Straatnaam: must be 3 to 50 characters a-zA-Z");
}
}
return errors;
}
public static boolean validUsername(String s) {
Pattern pattern = Pattern.compile(USERNAME_PATTERN);
Matcher matcher = pattern.matcher(s);
return matcher.matches();
}
public static boolean validStraatnaam(String s) {
Pattern patternStraat = Pattern.compile(STRAAT_PATTERN);
Matcher matcherStraat = patternStraat.matcher(s);
return matcherStraat.matches();
}
public static boolean validPlaats(String s) {
Pattern patternPlaats = Pattern.compile(PLAATS_PATTERN);
Matcher matcherPlaats = patternPlaats.matcher(s);
return matcherPlaats.matches();
}
public static boolean validHuisnummer(String s) {
Pattern patternHuisnummer = Pattern.compile(HUISNUMMER_PATTERN);
Matcher matcherHuisnummer = patternHuisnummer.matcher(s);
return matcherHuisnummer.matches();
}
}
GebruikerWijzigen.jsp:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@page contentType="text/html" pageEncoding="windows-1252"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>${paginaTitel}</title>
<link href="/WEBappMVCMavenSolution/style.css" rel="stylesheet" type="text/css">
</head>
<body>
<h2>${paginaTitel}</h2>
<c:if test="${errors != null}">
<!-- Mochten er errors zijn, dan worden ze hier getoond -->
<p>${errors}</p>
</c:if>
<c:choose>
<c:when test="${id == null}">
<!-- Als er geen id is meegegeven, ga je een gebruiker toevoegen -->
<form id="nieuweGebruiker" action="nieuw" method="post">
</c:when>
<c:otherwise>
<!-- Anders ga je een gebruiker wijzigen -->
<form id="wijzigenGebruiker" action="wijzig" method="post">
</c:otherwise>
</c:choose>
<p>
<c:if test="${id != null}">
<!-- Het id wordt meegestuurd, om te bepalen welke gebruiker je gaat wijzigen -->
<input type="hidden" name="id" id="id" value="${id}"></input>
</c:if>
<table border="0">
<tr>
<td>
<label for="naam">Naam</label>
</td>
<td>
<input type="textfield" id="naam" name="naam" value="${naam}"></input>
</td>
</tr>
<tr>
<td>
<label for="straatnaam">Straatnaam</label>
</td>
<td>
<input type="textfield" id="straatnaam" name="straatnaam" value="${adres}"></input>
</td>
</tr>
<tr>
<td>
<label for="plaats">Plaats</label>
</td>
<td>
<input type="textfield" id="plaats" name="plaats" value="${plaats}"></input>
</td>
</tr>
<tr>
<td>
<label for="huisnummer">Huisnummer</label>
</td>
<td>
<input type="textfield" id="huisnummer" name="huisnummer" value="${huisnummer}"></input>
</td>
</tr>
<tr>
<td>
<label for="plaats">Rol</label>
</td>
<td>
<select id="rolenummer" name="rolenummer" >
<c:forEach var="tempRollen" items="${rollen}">
<option value="${tempRollen.rol}">${tempRollen.rol}</option>
</c:forEach>
</select>
</td>
</tr>
</table>
</p>
<p>
<input class="submit" type="submit" value="Verzenden">
</p>
</form>
</body>
</html>
GebruikerWijzigenController.java:
package controllers;
import java.io.*;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import javax.servlet.*;
import javax.servlet.http.*;
import models.User;
import models.UserForm;
import validation.UserValidator;
public class GebruikerWijzigController extends HttpServlet {
private static String titelNieuw = "Nieuwe gebruiker"; //Titel voor de Nieuwe gebruiker pagina
private static String titelWijzig = "Wijzigen gebruiker"; //Titel voor de Wijzig gebruiker pagina
/* HTTP GET request */
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
if (request.getParameter("id") != null) {
//Als er een id is meegegeven, worden de gegevens van de gebruiker opgehaald.
long id = Long.parseLong(request.getParameter("id"));
request.setAttribute("id", id); // TODO: why?
// Haal een sessie object op uit het request
HttpSession sessie = request.getSession();
LinkedList gebruikers = (LinkedList) sessie.getAttribute("gebruikers"); //Haalt de lijst met gebruikers op en slaat deze op in een LinkedList
for (int i = 0; i < gebruikers.size(); i++) {
User tempGebruiker = (User) gebruikers.get(i);
//Als de gebruiker overeenkomt met het gegeven id, worden de gegevens ingevuld in het formulier.
if (tempGebruiker.getCustomerNumber() == id) {
request.setAttribute("naam", tempGebruiker.getName());
request.setAttribute("adres", tempGebruiker.getStreetAddress());
request.setAttribute("plaats", tempGebruiker.getCity());
request.setAttribute("huisnummer", tempGebruiker.getHouseNumber());
request.setAttribute("rolenummer", tempGebruiker.getRolenummer());
}
}
doorsturen(request, response, titelWijzig); //Stuurt door naar de Wijzig gebruiker pagina.
} else {
doorsturen(request, response, titelNieuw); //Stuurt door naar de Nieuwe gebruiker pagina.
}
}
@Override
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
String dispatchUrl = null;
long id = 0;
long rolenummer = 0;
List<String> errors = new ArrayList<String>();
UserForm userform = new UserForm();
userform.setName(request.getParameter("naam"));
userform.setStreetAddress(request.getParameter("straatnaam"));
userform.setHouseNumber(request.getParameter("huisnummer"));
userform.setCity(request.getParameter("plaats"));
if (request.getParameter("id") != null) {
id = Long.parseLong(request.getParameter("id"));
}
if (request.getParameter("role") != null) {
rolenummer = Long.parseLong(request.getParameter("role"));
}
// validate userForm
UserValidator userValidator = new UserValidator();
errors = userValidator.validate(userform);
if (!errors.isEmpty()) { // zolang er errors zijn , keer terug naar het invulformulier
request.setAttribute("errors", errors);
request.setAttribute("form", userform);
dispatchUrl = "/gebruiker_wijzigen.jsp";
} else {
// Haal een sessie object op uit het request
HttpSession sessie = request.getSession();
// Als the parameter 'id' niet null is, dan hebben we te maken met
// een user die wordt geupdate
boolean isUserUpdate = request.getParameter("id") != null;
// Haal de lijst met gebruikers op uit de sessie
List<User> gebruikers = (List) sessie.getAttribute("gebruikers");
// Controleer of de lijst met gebruikers niet null is, zo ja,
// creër een lege lijst en zet deze op de sessie
if (gebruikers == null) {
gebruikers = new LinkedList<User>();
}
// Zet de form parameters om in een User object
User formUser = getUserFromRequest(request);
// Indien we hier met een gebruikers update te maken hebben, dan halen
// we deze gebruiker op uit de lijst met gebruikers en wijzigen we zijn
// gegevens
if (isUserUpdate) {
for (int i = 0; i < gebruikers.size(); i++) {
User tempGebruiker = (User) gebruikers.get(i);
// Als het CustomerNumber van de tempGebruiker overeenkomt met
// het CutomerNumber van de formUser, dan wordt de gebruiker geupdate.
if (tempGebruiker.getCustomerNumber() == formUser.getCustomerNumber()) {
tempGebruiker.setName(formUser.getName());
tempGebruiker.setStreetAddress(formUser.getStreetAddress());
tempGebruiker.setCity(formUser.getCity());
tempGebruiker.setHouseNumber(formUser.getHouseNumber());
tempGebruiker.setRolenummer(formUser.getRolenummer());
}
}
} else {
// Anders zetten we een uniek id op het User object en voegen we
// deze als nieuwe gebruiker toe aan de lijst met gebruikers
long uniekId = System.nanoTime();
formUser.setCustomerNumber(uniekId);
gebruikers.add(formUser);
}
sessie.setAttribute("gebruikers", gebruikers);
sessie.setAttribute("aantalGebruikers", gebruikers.size());
response.sendRedirect("../gebruikers");
}
if (dispatchUrl != null) {
RequestDispatcher rd
= request.getRequestDispatcher(dispatchUrl);
rd.forward(request, response);
}
}
private void doorsturen(HttpServletRequest request, HttpServletResponse response, String titel)
throws ServletException, IOException {
// Set de pagina titel op het request
request.setAttribute("paginaTitel", titel);
// Stuur het resultaat van gebruiker_wijzigen.jsp terug naar de client
String address = "/gebruiker_wijzigen.jsp";
RequestDispatcher dispatcher = request.getRequestDispatcher(address);
dispatcher.forward(request, response);
}
/**
* Maakt een User object aan de hand van de parameters uit het http request.
*/
private User getUserFromRequest(HttpServletRequest request) {
User u = new User();
if (request.getParameter("id") != null && !request.getParameter("id").isEmpty()) {
u.setCustomerNumber(Long.parseLong(request.getParameter("id")));
}
if (request.getParameter("naam") != null) {
u.setName(request.getParameter("naam"));
}
if (request.getParameter("straatnaam") != null) {
u.setStreetAddress(request.getParameter("straatnaam"));
}
if (request.getParameter("plaats") != null) {
u.setCity(request.getParameter("plaats"));
}
if (request.getParameter("huisnummer") != null) {
u.setHouseNumber(request.getParameter("huisnummer"));
}
if (request.getParameter("rolenummer") != null) {
u.setRolenummer(request.getParameter("rolenummer"));
}
return u;
}
}