2008-12-12 67 views
5

我正在使用Spring,但這個問題適用於所有JSP控制器類型設計。在Spring/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)而不是格式化值的Map?

回答

5

的JSP通常沒有很多(或任何?)在他們的代碼,那麼你的選擇會是

  • 控制器
  • 標籤庫

我要說的是,一個標籤庫可能是大多數情況下你想要的,因爲通常視圖是關心格式化等事情的代碼。

如果標準標籤庫不能讓你在那裏,他們不難創建,所以你可以推出自己的。

1

我通常會在bean或視圖「助手」中進行格式化等操作。這有幾個優點,包括以下內容:

  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:控制器相同的想法返回一個數據模型,視圖負責將數據渲染爲可見的表示。有大量的JSP標籤庫用於滿足常見需求。

您提到複雜或計算的值。這些聽起來像結果數據模型的元素,所以應該在控制器中完成,即使它們原則上可以由其他數據(如sum,max和其他聚合值)確定。通過在視圖中格式化我的意思是基本的東西,如日期和數字格式,行分割,對齊。當然,數據和格式化表示之間的確切界限取決於應用程序,但我認爲你明白了。

相關問題