以前页面获取结果,然后再用 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