J'utilise Spring, mais cette question s'applique à tous les types de contrôleurs JSP.Dans Spring/JSP, où le formatage doit-il être effectué?
La page JSP fait référence à des données (à l'aide de balises) renseignées par le contrôleur correspondant. Ma question est, où est l'endroit approprié pour effectuer le formatage, dans JSP ou le contrôleur?
Jusqu'ici, j'ai préparé les données en les formatant dans mon contrôleur.
public class ViewPersonController extends org.springframework.web.servlet.mvc.AbstractController
{
private static final Format MY_DATE_FORMAT = new SimpleDateFormat(...);
protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response)
{
Person person = get person from backing service layer or database
Map properties = new HashMap();
// No formatting required, name is a String
properties.put("name", person.getName());
// getBirthDate() returns Date and is formatted by a Format
properties.put("birthDate", MY_DATE_FORMAT.format(person.getBirthDate()));
// latitude and longitude are separate fields in Person, but in the UI it's one field
properties.put("location", person.getLatitude() + ", " + person.getLongitude());
return new ModelAndView("viewPerson", "person", properties);
}
}
Le fichier JSP ressemblerait à quelque chose comme:
Name = <c:out value="${person. name}" /><br>
Birth Date = <c:out value="${person. birthDate}" /><br>
Location = <c:out value="${person. location}" /><br>
Je sais que JSP a quelques dispositions pour la mise en forme,
<%@ taglib uri="http://java.sun.com/jstl/fmt" prefix="fmt" %>
<fmt:formatDate type="date" value="${person. birthDate}" />
Mais cela ne fonctionne qu'avec Java de java.util.Format
. Que faire si j'ai besoin de valeurs plus complexes ou calculées? Dans un tel cas, mettre le code dans la JSP serait lourd (et moche).
Je suis curieux de savoir si cela suit l'esprit Spring/JSP/MVC. En d'autres termes, le contrôleur fait-il partie de la vue? Où est l'endroit préféré pour effectuer le formatage lié à la vue? Mon contrôleur doit-il simplement renvoyer l'objet (personne) au lieu d'une carte de valeurs formatées?
Mais cela violerait le fait de garder la vue séparée du modèle. –
C'est discutable. Vous obtenez une représentation sous forme de chaîne d'une propriété qui peut être utilisée n'importe où. Et surtout, vous obtenez moins de code, et c'est dans un endroit centralisé qui a du sens. – bpapa
Je dirais qu'une véritable "violation" serait si getLocation renvoyait une chaîne qui contenait des balises HTML ou quelque chose. – bpapa