自知其無知
          不懂,慢慢懂。
          posts - 2,comments - 2,trackbacks - 0

          以前頁面獲取結果,然后再用 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: ... /> ' 也是可以被解析的?
          于是就這么進行了嘗試:
          var div_comms = document.getElementById('comm');                      
                                 
          var str = "";
                                 
                                 
          for(var i=0;i<data_comms.length;i++){
                                        
                                       
          /*
                                         <div class="time">
                                           <fmt:formatDate pattern="yyyy-MM-dd" value="${comm.comm_create_time}" />
                                       </div>
                                        
          */

                                       
          var time = '<div class="time"><fmt:formatDate pattern="yyyy-MM-dd" value="' + data_comms[i].comm_create_time + '" /></div>';
                                     
          /*
                                      <h3 title="${comm.comm_user }">
                                           <y5k:substring length="12"
                                              text="${comm.comm_user }" append="" />
                                          :
                                      </h3><br/>              
                                      
          */
                                      
                                      
          var user = '<h3 title="' + data_comms[i].comm_user + '"><y5k:substring length="12" text="' + data_comms[i].comm_user + '" append="" />:</h3><br/>';                                 
                                      
          /*
                                         <h2>
                                          <y5k:substring length="18"
                                              text="${comm.comm_content }" append="" />
                                      </h2> 
                                       
          */
           
                                      
          var content = '<h2><y5k:substring length="18" text="' + data_comms[i].comm_user + '" append="" /> </h2>'; 
                                     
          /*
                                         <div class="hr_r"></div>     
                                      
          */

                                     
          var hr = '<div class="hr_r"></div>';                        
                                     alert(time);
                                      str 
          = str + (time + user + content + hr);
                                 }

                                 div_comms.innerHTMl 
          = str;

          利用 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 類型的參數。



          posted on 2008-12-15 14:42 CopyHoo 閱讀(556) 評論(0)  編輯  收藏 所屬分類: Ajax
          主站蜘蛛池模板: 常山县| 乌兰浩特市| 德清县| 定结县| 玛曲县| 眉山市| 平舆县| 阿坝| 屯昌县| 榆林市| 福清市| 阳山县| 报价| 图片| 家居| 天津市| 明水县| 双城市| 磐安县| 宜兰市| 拜城县| 乃东县| 福清市| 东丰县| 灵寿县| 额敏县| 黔南| 大荔县| 石渠县| 宁德市| 海伦市| 正定县| 泸溪县| 五大连池市| 普兰店市| 泸西县| 博客| 博兴县| 大关县| 勐海县| 墨竹工卡县|