2012-02-15 26 views
1

我有一個模型,這樣定義...操縱的Spring MVC模型字段JSP輸出

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

時間戳字段是好的數據庫,因爲我通過JPA持久化數據。但是,在JSP輸出中,我不想只顯示時間戳,我想將其呈現爲自定義的String。我想在自定義方法中定義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> 

回答

1

春天景色正常使用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> 
+0

上面的答案是否高於您的意思,或者您知道任何解決方案而無需使用自定義JSP標記? – 2012-02-16 09:36:24

+0

我給出的這個解決方案沒有使用自定義JSP標籤,它可以工作。 – aseychell 2012-02-16 09:43:51

+0

你能指點我一些實際的例子/教程嗎?非常感謝! – 2012-02-16 09:52:32

1

如何添加一個返回格式化字符串的「特殊」getter?

或者JSP標記,做的格式,如: JSP:

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

謝謝,請看我上面的編輯。問題是我把模型放在列表中,我想在表格中顯示。所以在表中,大約有20個屬性(=字段)在不同的單元格中顯示,只有一個屬性需要格式化。 如果我會爲「timestamp」屬性實現自己的getter,那麼我將失去在循環中全部運行它的可能性,對吧? – 2012-02-16 07:02:18

+0

不,添加此getter:'String getFormatedTimeStanp(){return new Date(this.timestamp); ...}'然後使用$ {currentproduct.fromatedtimestamp}' – Ralph 2012-02-16 08:06:56

+0

謝謝。這工作,與[viralpatel](http://viralpatel.net/blogs/2008/12/tutorial-create-custom-tag-library-taglib-in-jsp.html)和[這個問題]的額外幫助( http://stackoverflow.com/questions/1637302/passing-a-java-object-value-in-custom-jsp-tag)。對我來說仍然感覺有點複雜,但也許這就是因爲我來自PHP世界:) – 2012-02-16 09:34:03