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

Lascia che Artera
ti apra gli occhi.

Scopri la qualità del nostro servizio.

Garanzia soddisfatti o rimborsati

60 giorni

Migrazione e ottimizzazione

gratuite

Il miglior modo di iniziare, è provare

Registrati ora: è gratuito e senza impegni