我有一个像这样定义的模型......
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>
答案 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>