2017-04-26 09:57

如下代码即可打完收枪
String jsonString = HttpKit.readData(getRequest());
User user = FastJson.getJson().parse(jsonString, User.class);

2017-04-26 09:43

如果觉得 jfinal 好用,多多介绍给有需要的朋友们试用 ^_^

2017-04-26 08:49

使用 #(for.index) 即可极速打完收枪,通常序号从 1 开始比较好,所以还可以使用:
#(for.count)

这些在 jfinal 手册中都有说明。此外你的截图 html 中有黄色波浪线影响美观,这个在 jfinal 手册也有说明如何解决

2017-04-25 20:11

@vae 可以的,只要你 render 的时候以 "/" 打头就可以了,例如: render("/xyz/ab.html");

2017-04-25 15:56

让地址栏中的 url 与 controller 和方法名不相同就好

2017-04-25 11:31

一是注意字符集的问题,二是查询的时候不要将参数拼接在 sql 中,这样用就好:
find("select * from bo_vod_net_video where title = ? ", title);

2017-04-25 10:42

@why jfinal 只提供最简单最直白的解决方案,具体到应用中大家如何组合搭配,就看大家的喜好,以及应用场景了, just do it

2017-04-25 10:40

建议看一下 jfinal 3.0 手册,里面针对升级到 3.0 有专门的一章

2017-04-25 10:40

补充一下, jfinal 3.0 默认使用的是 jfinal template engine,所以如果你需要在 jf 3.0 中使用 freemarker , 需要配置一下:
me.setViewType(ViewType.FREE_MARKER);

2017-04-25 10:39

freemarker 的路径不建议这么配置,直接在 configRoute(Routes me) 中对 Routes 进行配置就可以了:
me.setBaseViewPath("/WEB-INF/template")

你上面的代码应该也是可以的,但不如我建议的办法好

2017-04-25 10:36

@whoismy8023 追求极简的设计,一开始会有觉得少了点的感觉,但少即是多,灵活去组合各种核心功能就能实现非常灵活自由的功能

2017-04-25 00:05

@whoismy8023 hibernate 的 HQL 就是在 HQL 中使用实体属性,而非使用的字段名,付出的代价是极大的,例如需要发明 HQL,不仅徒增学习成本,而且带来了非常大的麻烦

增删改查,通常增删改是不需要写数据表字段的,你试一下 model.save(),model.update()、model.delete() 就知道这三个方法完全不需要知道字段名

只有查询才与表字段有关,hibernate 的坑在此就不在赘述了。你感觉缺少了数据库字段和实体对象属性的对应关系,这个关系并不缺少, jfinal 通过反射数据库表在系统启动时就自动建立了,如果你是希望用注解或者 XML 去配置这种对应关系,那就严重违备了 jfinal 的极简设计风格

hibernate 时代就是利用 xml 或 annotation 建立了实体属性与表字段的关系,其缺点在此就不在赘述了

2017-04-24 21:50

这个 batchUpdate 方法为了达到最高性能,所以整个方法中只使用一条 sql ,并将其 preparedStatement(sql)

如果为 list 中的每个元素都生成一条 sql 就只能 createStatement(),然后不断 addBatch(sql) 各种不同的 sql

以上是两种不同的工作模式,前者在注释中已经说明,sql 会根据 list 中的第一个元素去生成,如果 list 中的元素各不相同,建议使用 batch(List sql ...) 这类方法

2017-04-24 20:29

@why jfinal template engine 已经提供了 #escape(...) 这个指令来处理,可以用一用

此外,在 model 中使用 filter 可以利用 jsoup 很精准地指定要过滤的标签类型,属性,例如过滤 script 标签,对于原始数据并不存在多少污染,因为类似于 script 这样的标签是一定要过滤掉的

2017-04-24 17:54

需要写个方法,分分钟打完收工