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






































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