自知其无知
不懂,慢慢懂。
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 阅读(552) 评论(0)  编辑  收藏 所属分类: Ajax

只有注册用户登录后才能发表评论。


网站导航: