2008-12-12 3 views
5

Я использую Spring, но этот вопрос относится ко всем проектам типа JSP-контроллера.Весной/JSP, где нужно форматировать?

Страница JSP ссылается на данные (используя теги), которые заполняются соответствующим контроллером. Мой вопрос: где подходящее место для форматирования, в JSP или контроллере?

До сих пор я готовил данные, форматируя его в своем контроллере.

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); 
    } 
} 

Файл JSP будет выглядеть примерно так:

Name = <c:out value="${person. name}" /><br> 
Birth Date = <c:out value="${person. birthDate}" /><br> 
Location = <c:out value="${person. location}" /><br> 

Я знаю, что JSP имеет некоторые положения для форматирования,

<%@ taglib uri="http://java.sun.com/jstl/fmt" prefix="fmt" %> 
<fmt:formatDate type="date" value="${person. birthDate}" /> 

Но это работает только с в Java java.util.Format. Что делать, если мне нужны более сложные или рассчитанные значения. В таком случае ввод кода в JSP был бы громоздким (и уродливым).

Мне любопытно, если это соответствует духу Spring/JSP/MVC. Другими словами, является ли контрольная часть представления? Где предпочтительное место для форматирования, связанного с просмотром? Должен ли мой контроллер просто возвращать объект (Person) вместо карты форматированных значений?

ответ

5

JSPs обычно не имеют много (или любой?) Кода в них, так что ваши варианты будут

  • контроллер
  • библиотеки тегов

Я бы сказал, что библиотека тегов вероятно, будет тем, что вы хотите в большинстве случаев, потому что, как правило, представление представляет собой код, который касается таких вещей, как форматирование.

Если стандартные библиотеки тегов не достают вас, их нетрудно создать, поэтому вы можете самостоятельно их катить.

1

Обычно я использую форматирование и т. Д. В компоненте или в представлении «помощник». Это имеет ряд преимуществ, в том числе следующие:

  1. Легче проверить
  2. Гибкость, чтобы изменить вид технологии, не заботясь о переносе или перезаписи, что вы сделали в пользовательских tablibs.
  3. Чистое и удобное управление контроллером и просмотр кода.
0

Путь я хотел бы сделать это -

экземпляр класса Person будет единственным объектом в модели ModelAndView

Я переместила бы «логику представления» в лицо класса. Например,

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

Я думаю, что в целом этот подход: 1 - укрепляет вашу модель домена. 2 - уменьшает дублирование кода (что, если вы хотите показать местоположение в другом JSP?С вашим подходом у вас будет много дубликатов кода)

+1

Но это будет нарушать сохранение отдельного вида модели. – 2008-12-12 17:45:47

1

Я предпочитаю рассматривать форматирование части отображаемого слоя, выполненную таким образом в JSP. Я использовал Velocity совсем недавно, но та же идея с JSP: controller возвращает модель данных, и представление отвечает за визуализацию этих данных в видимом представлении. Множество библиотек тегов JSP для общих нужд.

Вы упомянули комплексные или вычисленные значения. Те, которые звучат как элементы модели данных результатов для меня, должны выполняться в контроллере, даже если они в принципе могут быть определены другими данными, такими как сумма, макс и другие совокупные значения. Форматированием в представлении я имею в виду основные вещи, такие как форматы даты и числа, разделение строк, выравнивание. Конечно, точная линия между данными и форматированным представлением зависит от приложения, но я думаю, что вы поняли эту идею.

Смежные вопросы