为JSP输出操作Spring MVC模型字段

时间:2012-02-15 21:10:47

标签: java spring spring-mvc

我有一个像这样定义的模型......

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

时间戳字段适用于数据库,因为我通过JPA保留数据。但是,在JSP输出中,我不想长时间显示时间戳,我想将其作为自定义字符串呈现。我想在自定义方法中定义long / String转换。

我可以将timestamp字段转换为DateTime或其他东西,但这是一个普遍的问题 - 如何在不修改模型本身的情况下处理模型数据,因为它只适用于视图?我查看了Spring Conversion和Formatter SPI,但这似乎不适合(Formatter主要用于用户输入,转换适用于整个模型,我只想操作模型的一个字段)。

我已经考虑过为视图创建一个新对象,传递数据库模型中的所有数据并在那里操作它,但必须有一个更好的解决方案......

修改

一些额外的代码......这是我的控制器:

@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 个答案:

答案 0 :(得分:1)

添加一个返回格式化字符串的“特殊”getter怎么样?

或者执行格式化的JSP标记: JSP:

 <td><my:formatLongTimestamIntoSomethingUsefull
        value="${currentproduct.timestamp}"/></td>

答案 1 :(得分:1)

Spring视图通常使用getter和setter来访问模型的数据。最好的解决方案是提供格式化日期或将long对象转换为Date对象或其他所需格式的getter。然后,从视图中访问此getter方法。

修改

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>