Używam Spring, ale to pytanie dotyczy wszystkich projektów typu kontrolera JSP.W Spring/JSP, gdzie należy przeprowadzić formatowanie?
Strona JSP odwołuje się do danych (przy użyciu znaczników), które są wypełniane przez odpowiedni kontroler. Moje pytanie brzmi, gdzie jest odpowiednie miejsce do formatowania, w JSP lub kontroler?
Do tej pory przygotowywałam dane, formatując je w moim kontrolerze.
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);
}
}
Plik JSP będzie wyglądać mniej więcej tak:
Name = <c:out value="${person. name}" /><br>
Birth Date = <c:out value="${person. birthDate}" /><br>
Location = <c:out value="${person. location}" /><br>
wiem, że JSP ma pewne przepisy dotyczące formatowania
<%@ taglib uri="http://java.sun.com/jstl/fmt" prefix="fmt" %>
<fmt:formatDate type="date" value="${person. birthDate}" />
Ale to działa tylko z Java java.util.Format
. Co jeśli potrzebuję bardziej złożonych lub wyliczonych wartości. W takim przypadku umieszczenie kodu na stronie JSP byłoby uciążliwe (i nieprzyjemne).
Jestem ciekawy, czy jest to zgodne z duchem Spring/JSP/MVC. Innymi słowy, czy kontroler jest częścią widoku? Gdzie jest preferowane miejsce do formatowania związanego z wyświetlaniem? Czy mój kontroler powinien zwrócić obiekt (osobę) zamiast mapy sformatowanych wartości?
Ale to naruszyłoby trzymanie widoku oddzielnie od modelu. –
To dyskusyjne. Otrzymujesz ciąg znaków reprezentujący właściwość, którą można użyć w dowolnym miejscu. A co najważniejsze, dostajesz mniej kodu, a to w scentralizowanym miejscu, które ma sens. – bpapa
Powiedziałbym, że prawdziwe "naruszenie" byłoby, gdyby getLocation zwrócił ciąg znaków, który zawierał znaczniki HTML lub coś takiego. – bpapa