Estoy usando Spring, pero esta pregunta se aplica a todos los diseños de tipo de controlador JSP.En Spring/JSP, ¿dónde debería formatearse?
La página JSP hace referencia a datos (usando etiquetas) que se completan con el controlador correspondiente. Mi pregunta es, ¿dónde está el lugar apropiado para realizar el formateo, en JSP o en el controlador?
Hasta ahora he estado preparando los datos formateándolos en mi controlador.
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);
}
}
El archivo JSP sería algo como:
Name = <c:out value="${person. name}" /><br>
Birth Date = <c:out value="${person. birthDate}" /><br>
Location = <c:out value="${person. location}" /><br>
Sé que JSP tiene algunas disposiciones para el formato,
<%@ taglib uri="http://java.sun.com/jstl/fmt" prefix="fmt" %>
<fmt:formatDate type="date" value="${person. birthDate}" />
Pero esto sólo funciona con Java de java.util.Format
. ¿Qué pasa si necesito valores más complejos o computados? En tal caso, poner el código en el JSP sería engorroso (y feo).
Tengo curiosidad si esto sigue el espíritu Spring/JSP/MVC. En otras palabras, ¿el controlador es parte de la vista? ¿Dónde está el lugar preferido para realizar el formato relacionado con la vista? ¿Mi controlador debería devolver el objeto (Persona) en lugar de un Mapa de valores formateados?
Pero esto violaría mantener la vista separada del modelo. –
Eso es discutible. Obtendrá una representación de cadena de una propiedad que se puede usar en cualquier lugar. Y lo más importante es que obtiene menos código, y está en un lugar centralizado que tiene sentido. – bpapa
Diría que una verdadera "violación" sería si getLocation devolviera una cadena que tuviera etiquetas HTML o algo así. – bpapa