Управление полями модели Spring MVC для вывода JSP - PullRequest
1 голос
/ 16 февраля 2012

У меня есть модель, подобная этой ...

public class Product{
  private long timestamp;
  // get/set follows...
}

Поле метки времени подходит для базы данных, поскольку я сохраняю данные через JPA. Однако в выводе JSP я не хочу представлять временную метку так долго, я хочу представить ее как настроенную строку. Я хотел бы определить преобразование long / String в пользовательский метод.

Я мог бы преобразовать поле метки времени в DateTime или что-то в этом роде, но это общий вопрос - как можно обрабатывать данные модели без изменения самой модели, потому что это только для вида? Я посмотрел на Spring Conversion и SPI Formatter, но здесь это не подходит (Formatter в основном для ввода данных пользователем, Conversion применяется ко всей модели, и я просто хочу управлять одним полем модели) .

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

EDIT

Дополнительный код ... вот мой контроллер:

@RequestMapping(method=RequestMethod.GET, value="/")
public ModelAndView getAllProducts() {
    List<Product> products = daoReader.findAllProducts();

    ModelAndView mv = new ModelAndView("myproductview");
    mv.addObject("products", products);

    return mv;

А это JSP (упрощенно):

<c:forEach items="${products}" var="currentproduct">
        <tr>
            <td>${currentproduct.timestamp}</td>
            <td>${currentproduct.name}</td>
        </tr>
</c:forEach>

Ответы [ 2 ]

1 голос
/ 16 февраля 2012

Представления Spring обычно используют методы получения и установки для доступа к данным модели. Лучшим решением было бы предоставить метод получения, который форматирует дату или преобразует объект long в объект Date или другой необходимый формат. Из представлений вы затем получаете доступ к этому методу получения.

EDIT

public class Product{
  private long timestamp;

  public Date getDate() {
        return new Date(timestamp);
  }
}

и из вида

<c:forEach items="${products}" var="currentproduct">
        <tr>
            <td>${currentproduct.date}</td>
            <td>${currentproduct.name}</td>
        </tr>
</c:forEach>
1 голос
/ 16 февраля 2012

А как насчет добавления «специального» геттера, который возвращает форматированную строку?

Или тег JSP, который выполняет форматирование следующим образом: jsp:

 <td><my:formatLongTimestamIntoSomethingUsefull
        value="${currentproduct.timestamp}"/></td>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...