In questo articolo vedremo come processare e validare i form con il nostro mini-framework MVC. Per il codice e la configurazione vi rimandiamo alla prima e seconda parte.
Processamento dei form
La gestione dei form è sicuramente la più importante funzionalità di una web application, in effetti è ciò che distingue un sito statico da un’applicazione vera e propria. In genere le fasi di elaborazione sono le seguenti:
- all’utente viene presentata una pagina con un form. Questa pagina viene spesso indicata come form view;
- l’utente inserisce dei dati e preme un pulsante per l’invio;
- se ha commesso degli errori nella compilazione il form gli viene riproposto, aggiungendo uno o più messaggi d’errore. A questo punto l’utente re-invia il form;
- se i dati sono corretti l’applicazione continua il suo flusso di lavoro, che può essere una nuova pagina, lo stesso form, un file da scaricare, e così via.
Realizzazione del controller
Questo è il codice del controller:
[java]package it.artera.webtut.mvc;
import java.util.*;
import javax.servlet.http.*;
public class HelloController implements Controller {
private String formView = "/WEB-INF/pages/helloForm.jsp";
private String successView = "/WEB-INF/pages/helloSuccess.jsp";
public String action(HttpServletRequest request, HttpServletResponse response) {
String viewName = formView;
// se il form è stato inviato il metodo HTTP è POST
if ("POST".equalsIgnoreCase(request.getMethod())) {
// validazione dei dati
String name = request.getParameter("name");
String age = request.getParameter("age");
List<String> errors = new ArrayList<String>();
// controlla campi obbligatori
if (name == null || name.trim().length() == 0) {
errors.add("\"Nome\" è un campo obbligatorio");
}
if (age == null || age.trim().length() == 0) {
errors.add("\"Eta’\" è un campo obbligatorio");
}
// se non ci sono stati errori…
if (errors.size() == 0) {
// … mostra la pagina di destinazione
viewName = successView;
} else {
request.setAttribute("errors", errors);
}
}
return viewName;
}
}[/java]
Il suo funzionamento è molto semplice:
- quando viene eseguita una richiesta HTTP GET al client viene inviata la pagina con il form da compilare;
- a fronte di una POST, ovvero il submit di un form, il controller valida l’input e agisce di conseguenza.
Il form
La pagina JSP che ospita il form è /WEB-INF/pages/helloForm.jsp, il cui codice è:
[html]<html xmlns="http://www.w3.org/1999/xhtml">
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<head>
<title>helloForm.jsp</title>
</head>
<body>
<c:if test="${! empty(errors)}">
<h4>Correggere questi errori</h4>
<ul>
<c:forEach items="${errors}" var="msg">
<li>${fn:escapeXml(msg)}</li>
</c:forEach>
</ul>
</c:if>
<form action="hello.do" method="post">
<p>
<label for="name">Nome</label>
<input id="name" name="name" value="${param.name}" />
</p>
<p>
<label for="age">Età</label>
<input id="age" name="age" value="${param.age}" />
</p>
<button type="submit">Invia</button>
</form>
</body>
</html>[/html]
La pagina finale, ovvero quella che verrà mostrata dopo il submit del form, è /WEB-INF/pages/helloSuccess.jsp, il cui contenuto (per gli scopi dell’articolo) è ininfluente.
Test
Ora è possibile testare il nostro controller, è sufficiente aprire la “pagina virtuale” /hello.do sulla nostra applicazione, per vedere un form con i campi Nome ed Età vuoti. Se proviamo ad inviarlo senza compilare uno dei due campi, la pagina ci restituirà una lista degli errori da correggere.