2008-12-12 7 views
5

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?

Antwort

5

JSPs hat in der Regel nicht viel (oder irgendein?) Code in ihnen, so dass Ihre Optionen

  • Controller
  • Tag-Bibliotheken würden

Ich würde sagen, dass eine Tag-Bibliothek wäre wahrscheinlich das, was Sie für die meisten Fälle wollen, denn normalerweise ist die Ansicht der Code, der sich um Dinge wie Formatierung kümmert.

Wenn Standard-Tag-Bibliotheken Sie nicht dorthin bringen, sind sie nicht schwer zu erstellen, so dass Sie Ihre eigenen rollen können.

1

Ich mache normalerweise Formatierung, etc. in der Bean oder eine Ansicht "Helfer". Dies hat mehrere Vorteile, einschließlich der folgenden:

  1. Einfachere
  2. Flexibilität testen Sie Ihre Technologien zu ändern, ohne sich Gedanken über die Portierung oder Umschreiben, was Sie in benutzerdefinierten tablibs getan haben.
  3. Reiniger und einfacher zu pflegen Controller und Code anzeigen.
0

So wie ich es tun würde, ist -

eine Instanz der Klasse Person das einzige Objekt in dem Modell der

Modeland würde ich die „Präsentationslogik“ in der Person bewegen würde Klasse selbst. Zum Beispiel

public class Person { 
    public String getLocation() { 
     return this.latitude.concat(", ").concat(this.longitude); 
    } 
} 

denke ich, insgesamt diesen Ansatz: 1 - stärkt das Domänenmodell. 2 - reduziert die Code-Duplizierung (was ist, wenn Sie den Speicherort in einer anderen JSP anzeigen möchten?Mit Ihrem Ansatz würden Sie viel Code dupliziert haben)

+1

Aber dies würde verletzen, die Ansicht getrennt von dem Modell zu halten. –

+0

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

+0

Ich würde sagen, eine wahre "Verletzung" wäre, wenn getLocation eine Zeichenfolge, die HTML-Tags in ihm oder etwas hatte zurückgegeben. – bpapa

1

Ich bevorzuge es, einen Teil der Anzeigeebene zu formatieren, so in der JSP getan. Ich habe Velocity zuletzt verwendet, aber die gleiche Idee mit JSP: Der Controller gibt ein Datenmodell zurück, und die Ansicht ist verantwortlich für das Rendern dieser Daten in eine sichtbare Repräsentation. Viele JSP-Tag-Bibliotheken für allgemeine Bedürfnisse.

Sie erwähnen komplexe oder berechnete Werte. Diese klingen wie Elemente des Ergebnisdatenmodells für mich, sollten also im Controller gemacht werden, auch wenn sie prinzipiell durch andere Daten wie Summen-, Max- und andere Aggregatwerte bestimmt werden können. Unter Formatierung in der Ansicht verstehe ich grundlegende Dinge wie Datums- und Zahlenformate, Zeilenaufteilung, Ausrichtung. Natürlich hängt die genaue Linie zwischen Daten und formatierter Darstellung von der Anwendung ab, aber ich denke, Sie haben die Idee.

Verwandte Themen