Jfinal的renderJson()返回的json有些时间属性只有日期部分。
数据库中的字段都有时分秒。
表中两个字段类型一样:
action:
public void login() {
// 前端传递的对象
User user = getModel(User.class, "user");
User db_user = service.login(user);
if (db_user!=null) {
getSession().setAttribute("user", db_user);
System.out.println(db_user);
renderJson(db_user);
//setAttr("msg", "登录成功:"+db_user);
//render("/msg.jsp");
}else {
setAttr("msg", "登录失败");
render("/msg.jsp");
}
}
上面system打印的System.out.println(db_user);也都有时分秒
service的login()
@Before(Tx.class)
public User login(User user) {
User db_user= User.dao.findFirst("select * from user where account=?", user.getStr("account"));
if (db_user!=null) {
if (db_user.getStr("pwd").equals(user.getStr("pwd"))) {
db_user.set("lastLoginTime", new Date()).update();
return db_user;
}else {
return null;
}
}else {
return null;
}
}
上面使用的是:java.util.Date
可是返回的json其中一个字段没有时分秒
很奇怪,不清楚为什么。@JFinal 我已经贴出service的login方法了
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(10)
这个问题一直都不存在,就是一个日期输出格式设置问题:
JsonManager.me().setDefaultDatePattern("yyyy-MM-dd HH:mm:ss")
日期型数据只要先确保时分秒确实存在,剩下的就是一个 pattern 配置的事
所以我暂时没有研究jfinal了。实在太忙了
不知道现在jfinal还有没有这个问题,当时有个项目本来想用jfinal的的确感觉很强大,但是遇到这个问题的时候,就不敢用了。不知道现在的新版本还有这个问题没有了
遇到同样问题,最开始以为是Jfinal的BUG,但是仔细研究源码后,是因为默认的JFinalJsonFactory返回的JFinalJSon的默认对java.util.Date是只有日期的部分的转换,但是JFinalJson在使用DatePattern时又默认是局部变量为优先,所以在JFinalConfig里面怎么全局设置都不能改变DatePattern的格式。希望作者将DatePattern的赋值方法暴露出来啊
debug发现从数据库拿到的createTime的类型是Timestamp,而自己set和update的lastLoginTimed的类型是util.Date更新到数据的时候没问题会自动转为数据库的timestamp,但是程序内存中的lastLoginTimed依然是util.Date
尝试直接返回Date()对象,就没有时分秒
您好直接renderJson(new Date()); 就没有时分秒。
单步跟踪到 json 转换类里面去,看里面的处理细节,如果找到解决办法回来分享一下,我这里测试都是没有问题的,所以无法重现你的问题
此外,建议将 timestamp 改为 datetime,这个类型也是支持时分秒的
目前自己找到的解决办法就是update之后再查一次:
不然直接返回update之后的model会出现没有时分秒。求 @JFinal可以提供一个标准的使用方式
你好,我设置了一次最后一次登录时间传入 new date() ,难道这样就不带时分秒吗?那我应该传入哪种对象呢?
应该是你的 service.login(user) 这个方法内部对字段值进行过重新调整,因为这个转换是同一套代码,对于同一个数据类型,不可能区别对待