前言:js是客户端代码,jstl是服务端代码(jstl标签会被解析成 java 的一部分)
fmt标签中的参数必须为Date格式,如果是字符串则无法解析,需要先将字符串转化为Date格式。
- 使用JSTL的fmt标签解决“.0”问题
问题描述:Oracle查询出的时间字段,在后台查询出以Date格式传给前台页面展示时,在时间最后都有个“.0”,很是影响美观。
jsp页面中引入标签:
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
jsp页面中调用标签:
<fmt:formatDate value="${time}" pattern="yyyy-MM-dd HH:mm:ss"/>
总结:fmt标签需要配合EL标签、其他JSTL标签(比如c标签)来对参数进行格式处理。但是有个弊端就是不能再js中传入参数,不如ajax传回的参数中时间格式需要处理时,无法传入到fmt标签里。查看fmt如何使用
- 使用数据库时间字段字符串格式替代ajax时间参数无法传入fmt标签办法。
问题描述:在使用JSTL标签处理时间格式时,可以解决服务器传过来的时间格式问题,但是在使用了ajax的js中调用该标签时,无法传入ajax的返回参数。
$(".content").append("<div class='msgBox'>" +
"<div class='msgTxt'>"+s.content+"</div>" +
"</div>" +
"<fmt\:formatDate value="+date+" pattern='yyyy-MM-dd HH:mm:ss'/>");
在上面的代码中,需要说明的是js的双引号中不能出现“:”不然会报错,这应该是为了避免与json格式的冲突。在使用“\”转义之后虽然能运行,但是在页面上却显示不出fmt处理后的结果,查看页面元素发现端倪
在使用js的append方法使用ajax参数进行添加元素时,fmt标签变成静态元素了。
在页面加载中是先运行jstl标签生成相关java,再执行js。然而在运行jstl时,可以执行js中的jstl标签,但是只能是直接写出来的,如果是注释,或者在引号中则不会运行。引号中的标签则是将其作为字符串来处理。
替代办法:在查询出Oracle时间字段时,给他固定好格式,TO_CHAR(t.feedback_time,'yyyy-mm-dd hh24:mi:ss'),不管是直接的jstl标签加载,还是ajax的局部动态加载,都只要展示时间字符串即可了。