Ich benutze Spring, aber diese Frage gilt für alle JSP-Controller-Designs.In Spring/JSP, wo sollte Formatierung durchgeführt werden?
Die JSP-Seite verweist auf Daten (mit Tags), die vom entsprechenden Controller aufgefüllt werden. Meine Frage ist, wo ist der richtige Platz zum Formatieren in JSP oder dem Controller?
Bis jetzt habe ich die Daten vorbereitet, indem ich es in meinem Controller formatiere.
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);
}
}
Die JSP-Datei würde in etwa so aussehen:
Name = <c:out value="${person. name}" /><br>
Birth Date = <c:out value="${person. birthDate}" /><br>
Location = <c:out value="${person. location}" /><br>
Ich weiß, dass JSP hat einige Bestimmungen für die Formatierung,
<%@ taglib uri="http://java.sun.com/jstl/fmt" prefix="fmt" %>
<fmt:formatDate type="date" value="${person. birthDate}" />
Aber das funktioniert nur mit Java java.util.Format
. Was ist, wenn ich komplexere oder berechnete Werte benötige? In einem solchen Fall wäre das Einfügen des Codes in die JSP mühsam (und hässlich).
Ich bin gespannt, ob dies dem Geist Spring/JSP/MVC folgt. Mit anderen Worten, ist der Controller Teil der Ansicht? Wo wird die Ansichtsformatierung bevorzugt? Sollte mein Controller gerade das Objekt (Person) anstelle einer Karte mit formatierten Werten zurückgeben?
Aber dies würde verletzen, die Ansicht getrennt von dem Modell zu halten. –
Das ist umstritten. Sie erhalten eine String-Repräsentation einer Eigenschaft, die überall verwendet werden kann. Und am wichtigsten ist, dass Sie weniger Code erhalten, und das an einem zentralen Ort, der Sinn ergibt. – bpapa
Ich würde sagen, eine wahre "Verletzung" wäre, wenn getLocation eine Zeichenfolge, die HTML-Tags in ihm oder etwas hatte zurückgegeben. – bpapa