以前頁面獲取結果,然后再用 jstl 等標簽直接在頁面胡搗一翻,比如改變顯示日期的格式:
<fmt:formatDate patter="yyyy-MM-dd" value="${comm.comm_create_time}" />
但是現在用 Ajax 將結果返回了,頁面的這些格式該如何處理呢?(是在頁面處理數據格式呢?還是在 Controller 中直接格式化你要的字串,然后傳遞出來,那么頁面僅僅負責 innerHTML 或者 Dom 的 append ?)
這個暫時不說(過一會兒討論)。
現在項目本來就沒有這個要求,所以自己的這一塊得因為 ajax 而硬吞下去,原本頁面的
<fmt ... /> 在這里是不是可以用
innerHTML = '<fmt:formatDate pattern="yyyy-MM-dd" value="${comm.comm_create_time}" /> ';
這樣 innerHTML 到 jsp 頁面后,瀏覽器會怎么解析這一段呢?是不是將 <fmt:> 當做文本字串呢?還是當做正常的標簽? 如果參照 innerHTML = '<b>hello world</b>' 會使標簽 <b> 生效,也就是說會將 innerHTML 中的標簽進行解析,那么 innerHTML = '<fmt: ... /> ' 也是可以被解析的?
于是就這么進行了嘗試:






































利用 FF 進行了查看,頁面從 div 的id 為 comm 的位置開始,就一片空白了。。
為什么?
于是利用 FireBug 查看了 FF 的頁面的源碼,可以看到,我們 innerHTML 的東西其實都在頁面中,但是很奇怪的是,沒有顯示出來?為什么?這就可能是 HTML 標簽的錯誤的使用!!!就像你有 <title> 的開始,但是沒有 </title > 結束標簽一樣,你的頁面就會是空白。
于是看了我 inner 的幾個標簽。恍然大悟 (恍然大霧) :
var time = '<div class="time"><fmt:formatDate pattern="yyyy-MM-dd" value="' + data_comms[i].comm_create_time + '" /></div>';
最后解釋的結果為:
var time = '<div class="time"><fmt:formatDate pattern="yyyy-MM-dd" value="1229321538000" /></div>';
也就是說 value= data_comms[i].comm_create_time 解釋的結果為 1229321538000
我將 <div class="time"><fmt:formatDate pattern="yyyy-MM-dd" value="1229321538000" /></div>
拷貝到 jsp 頁面單獨執行,結果就是這一句以及這一句下面的語句在頁面上解釋不出來。
于是我又試了
<div class="time"><fmt:formatDate pattern="yyyy-MM-dd" value="2008-12-12 10:10:10.4" /></div>
還是不行,只有查看 API 了。
=============================================================
<fmt:formatDate> 標簽用于格式化日期。它的屬性和描述如表 9.23 所示:
表 9.23 <fmt:formatDate> 標簽屬性和說明
屬性 |
描述 |
value |
格式化的日期,該屬性的內容應該是 java.util.Date 類型的實例 |
type |
格式化的類型 |
pattern |
格式化模式 |
var |
結果保存變量 |
scope |
變量的作用范圍 |
timeZone |
指定格式化日期的時區 |
<fmt:formatDate> 標簽與 <fmt:timeZone> 、 <fmt:setTimeZone> 兩組標簽的關系密切。若沒有指定 timeZone屬性, 也可以通過 <fmt:timeZone> 、 <fmt:setTimeZone> 兩組標簽設定的時區來格式化最后的結果。
=============================================================
這里有兩個小細節:
1. 從 Contorller 傳遞過來的 Date 類型的值在 js 中進行獲取的時候,會被自動進行 getTime() 而變為回去毫秒數 。比如這里的 data_comms[i].comm_creat_time 就被解釋為了類似 1229321538000 的結果。
2. fmt:formatDate 的 value 一定要是一個 java.util.Date 類型的參數。