enjoy模板输入日期问题

后台代码: setAttr("startDate",  “2019-05-09”);

前台代码:var startDate = #(startDate);

为何前台startDate的结果是:2005

是进行了计算吗:2019-5-9 = 2005 

该如何避免这种问题?





评论区

JFinal

2019-05-09 17:44

是原样输出,右键点击浏览器,查看生成的 html ,可以看到是 2019-05-09

而不是 2015

输出指令会原样输出字符串 #(...)

注意,不要粗心搞错成 #date(...) 指令,这里专指 #(...)

#date 指令不支持输出 String,这样是错误的 :
#date("2019-5-1")

JFinal

2019-05-09 17:46

如果一定要让 #date 指令很方便智能化处理 Date 与 String ,可以用一个 Shared method 扩展,大致如下:
public class MyDateSharedMethod {
public Date toDate(String dateStr) {
return 这里将 dateStr 自行转化成 Date;
}

public Date toDate(Date date) {
// 这里原值返回
return date
}
}

然后配置一下:
engine.addSharedMethod(MyDateSharedMethod.class);

用的时候这样:
#date(toDate(startDate));

这样用的时候,无论你的 starDate 是一个 Date 还是一个纯 String ,都会被正确处理

要输就输给追求

2019-05-09 18:21

我觉得js里面取字符串还是用单引号包起来安全一点。

liugz

2019-05-09 19:17

@要输就输给追求 一语点醒梦中人。js中输出指令写在单引号中就可以了:
var startDate = '#(startDate)';

要输就输给追求

2019-05-10 08:27

@liugz 是的,js的弱类型很蛋疼。var temp = #(temp_str) ; 如果temp_str="abc" 的话,js很可能会报abc is undefined。所以除了boolean 和number不用单引号,其它的我都用单引号

热门反馈

扫码入社