Implementare il design pattern MVC in Java con le servlet – 3a parte

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

Linkografia

Condividi