2013-10-25 58 views
0

完整的項目:LINK TO PROJECT的Java驗證不正常工作

所以我有這樣的代碼應該驗證4個輸入字段在JSP文件中,但它不能正常工作:

它只是檢查第一輸入字段和,如果我正確填寫第一輸入字段,它只是傳遞和發送的形式。在代碼中,我剛剛作出瞭如果其他人如果..前兩個輸入字段。 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; 
    } 

} 

回答

2

你應該改變你的if-else if-else後者多if's

if (naam == null || naam.trim().isEmpty()) { 
    errors.add("User must have a name"); 
} 

if (straatnaam == null || straatnaam.trim().isEmpty()) { 
    errors.add("Straatnaam must have a name"); 
} 

if (!this.validUsername(naam)) { 
    errors.add("Naam: must be 3 to 10 characters a-zA-Z"); 
} 

if (!this.validStraatnaam(straatnaam)) { 
    errors.add("Straatnaam: must be 3 to 50 characters a-zA-Z"); 
} 

另外,我想你應該改變:

String naam = userForm.getName(); 
String straatnaam = userForm.getName(); 

到:

String naam = userForm.getName(); 
String straatnaam = userForm.getStraatName(); // Or whatever is the name 

另外,我建議移動的方法本身內部列表聲明,因爲它是使用有隻要。另外,我而不是存儲圖案作爲String,我想將它們存儲爲預編譯的圖案,使不需要的模式時在每個方法調用編譯。

+0

還是同樣的問題......如果第一個輸入字段(NAAM)是正確的,它通過和發送形成。 – MOTIVECODEX

+0

@ F4LLCON那麼問題是其他地方。它不在你顯示的代碼中。你可以顯示JSP頁面,你在哪裏使用錯誤列表?另外,你的模式是否正確? –

+0

在我的問題頂部的項目鏈接,需要粘貼這個驗證的3頁,我的問題.. – MOTIVECODEX

1

請找到最終的解決方案,我部署你的代碼,做了以下變化,並在我結束其工作的罰款。 UPDATE

在你UserForm class

private String straatnaam; 
public String getStraatnaam() { 
    return straatnaam; 
} 

public void setStraatnaam(String straatnaam) { 
    this.straatnaam = straatnaam; 
} 

在你的控制器GebruikerWijzigControllerdoPost method補充一點:

userform.setStraatnaam(request.getParameter("straatnaam")); 

而在UserValidator,做下面的變化顯示:

if (naam == null || naam.trim().isEmpty()) { 
     errors.add("User must have a name"); 
    } 
    if (straatnaam == null || straatnaam.trim().isEmpty()) { 
     errors.add("Straatnaam must have a name"); 
    } 

    if(!errors.isEmpty()) {   
     if (!validUsername(naam)) { // Use not(!) 
      errors.add("Naam: must be 3 toooooooo 10 characters a-zA-Z"); 
     } 

     if (!validStraatnaam(straatnaam)) { //Use not(!) 
      errors.add("Straatnaam: must be 3 tooooo 50 characters a-zA-Z"); 
     } 
    } 

實際的問題是,無論是時間,你正在使用的名稱,並期待爲straatnaam驗證。

也使其確保您的類越來越構建和不使用老班

+0

謝謝....但這是一樣的羅希特耆那族說9分鐘前 – MOTIVECODEX

+0

更新我的答案,試試這個 – Prateek

+0

仍然發送表單後第一個輸入字段是正確的。我認爲這個問題是在別的地方,因爲我嘗試了10個組合,如果其他等 – MOTIVECODEX