2017-05-24 15:16

渲染可以理解为以模板文件 + 数据为基础,生成界面内容用于显示给用户,你可以简单理解为向客户端响应不同类型、不同格式的数据就好,例如:有可能是 html 格式、有可能是图片格式,有可能是 json 格式

freemarker、velocity 是流行很多年的模板引擎,jfinal 手册中提供了 jfinal template 的文档。

2017-05-24 12:23

在 jfinal 中使用任何第三方,本质上都不需要有个集成的动作,直接用就好。

很久没有用过 quartz 了,无法给到具体的建议,建议你直接拿着 quartz 官方文档直接用就行

2017-05-24 12:19

@IvyHelen 开发这个插件的时候,当时并不知道 password 与 database 都支持 null值,只能确定这两个参数可以不传递,站在 jfinal 的角度,如果某个参数可以不传递,最好还是认为 redis 内部是有默认值去处理,而如果 jfinal 允许 null 值,可能会覆盖掉 redis 内部的默认值

你可以当成是一种防御性编程习惯,刚刚已经将 RedisPlugin 中所有属性改为 protected 了,后续版本便于大家继承并扩展自己需要的构造方法

目前的情况下,建议通过建议继承 RedisPlugin 并 copy 一下 start() stop() 这两个方法中的代码来实现,再自建一个满足自己需求的构造方法

2017-05-24 12:06

采用下面的配置:
groupId:com.jfinal
artifactId:jetty-server
version:8.1.8
scope:IDEA 下设置为 compile,ecipse 下可以设置为 provided

采用 JFinal.start("src/main/webapp", 8080, "/") 这种方式启动时,是使用的 jfinal 整合的 jetty 来启动的,对于版本有要求,高版本的 jetty 连包名都改变了

2017-05-24 11:32

@LiJunv5 建议关注一下 jfinal 官方推出的模板引擎,在手册中有介绍,在首页可以下载 jfinal demo,里面有例子,感谢支持社区

2017-05-24 11:03

升级到 jfinal 3.1,里面有一个 paginateByFullSql(...) 方法可以使用,如果不想升级,可以参考 paginateBuFullSql(...) 方法在 YourModel 中添加这样一个方法

引发这个问题的原因是分页计算 totalRow 的 sql 是不能有 order by 子句的,而你的这个 sql 貌似需要这个 order by 才算正确,产生了冲突

2017-05-23 19:25

此外,站在 jfinal 的角度,从 table 反向生成 model 复杂度低、工作量小,稳定可靠

2017-05-23 19:24

jfinal 没有开发这个功能,但你可以通过 Db.update(sql) 来实现这个功能

jfinal 主张数据是核心,需要非常稳固可靠,用程序去生成表结构,总是有点不放心,手动去创建表可以精细化去控制表结构、字段类型、字段长度等等

2017-05-23 19:10

RedisPlugin 构造时的参数有很多,如果要添加对这些参数的重载方法,参数组合起来绝成的构造方法数量非常之庞大

因此,jfinal 选择了只添加认为比较常用的构造方法的组合,如果这些组合不能满足开发者需求,可以使用那个参数最多的构造方法使用。是麻烦了点

2017-05-23 11:40

if(jo.getIntValue("CityID")==shiID) 这个 if 判断的值是 true 还是 false ?

2017-05-23 10:39

光看 bean 看不出啥问题,关键是你如何存,如何取?

2017-05-23 10:36

@cleverbug 你还可以通过扩令扩展来实现这个功能,用起来会更方便,例如这样用:
#i18n(key)

2017-05-23 10:20

@Ferrari8899 打个官方广告,这类解决方案,现成的代码,在 jfinal club 项目中都有,直接可以使用,可以考虑一下加入俱乐部

2017-05-23 10:14

将此拦截器配置为全局拦截器:
me.add(new LoginSessionInterceptor());

此外,很多年前就不这么用了,session 在应用重启时会丢失,无论是开发还是生产环境都非常不便,现在我们做登录 session 维护都是直接写入数据库,然后在数据库与内存间使用缓存提升下性能

由于登录数据是放在数据库中的,当应用断电或重启都无所谓

2017-05-23 10:12

写个拦截器,然后判断 session 中的相关值是否存在,存在则继续,不存在则重定向到 login 页面,几行代码的事:
Account loginAccount = inv.getController().getSessionAttr("loginAccount");
if (loginAccount != null) {
inv.invoke();
} else {
inv.getController().redirect("/login");
}