2020-04-22 21:32

因为从 JDBC 的 ResultSet 中读取数据是从序号为 1 开始的,注意看你截图中代码的 for( int i=1 ...) 这个地方的 i 是从 1 开始的

如果数组不多出一个 1 来,那么如果 for 循环的 i 从 0 开始,你得在 rs.getXxx 时加 1,例如:
value = rs.getObject( i + 1);

如果 for 循环的 i 从 1 开始,你得在 if 判断的 types 数组减去一个 1,例如:
if ( types[ i - 1] ...)

总之,无法去除加法或者减法动作。jfinal 的设计是用空间换时间,省去了加、减操作,提升性能

ModelBuilder 这个方法内部是热点代码,优化是有意义的。

jfinal 极度关注性能,比传统 web + orm + template 组合框架性能高太多了:
https://www.oschina.net/news/90815/jfinal-3-3
https://www.oschina.net/news/112156/enjoy-4-8-released

2020-04-22 16:04

估计你用的比较古老的 jetty-server 版本,最新的版本在这里:
https://mvnrepository.com/artifact/com.jfinal/jetty-server

为 2019.3 版

2020-04-22 12:01

利用好 engine.setBaseTemplatePath(...) 这个配置

你当前打成了 jar 包, 一些路径与在 IDEA、eclipse 时有变动

最简单的办法是可以在运行这个 jar 包时传入一个参数,该参数可以动态指定 engine.setBaseTemplatePath(...)

2020-04-22 11:17

@或是的话 vue 号称是可以渐进式使用,应该是可以的

你看看它文档中的渐进式用法的相关部分

2020-04-22 11:05

vue 貌似有只需引入 vue.js 就可以像 jquery 一样的用法,只要是 html + javascript 的用法就可以的,你试一下

vue 官方文档中应该有介绍

2020-04-22 11:04

@要输就输给追求 url 中的句点符号约定当成是静态资源请求, jfinal 的 action 不会处理它

解决办法参考:
1:将 "V1.0" 改成下划线形式,如: "V1_0"。 这种做法在 java 中是很常见的处理方式,JDK 源码中也这么用过

2:如果一定要使用句号的形式,可以用 @要输就输给追求 介绍的办法,用 handler 处理一下:
String target = target.replace(".", "_")
然后 action 的路径弄成下划线形式就可以对应上了

2020-04-22 01:33

第一个需求可以实现,不过目前这个需求只有你一个人提出来,貌似需求不是很强烈

第二个需求,其实是我一直刻意避免的。以前多次说明过原因,我大致说一下:
1:api 调用方式代码并不比直接 sql 简单
2:api 调用方式无法实现复杂 sql ,即便可以实现,内部结构一定会极度复杂
3:where 条件如果嵌套、小扩号指定优先级的需求不好处理,例如:
where a = x and (b = y or c = z)
4:会增加学习成本,API 肯定也是要学习的。另一方面 sql 也必须要学习,所以会多学一个 api 用法。jfinal 的设计可以只学会 sql 就可以
5:其它还有一些原因,在此不再详述

当然,api 调用方式也有优点:
1:方法调用有代码提示,出错的概率比直接写 sql 要低一点
2:安全感比直接写 sql 要高一点

没有完美的设计,只有利弊权衡后的取舍

2020-04-21 23:47

@INFECTION_K 使用 enjoy 生成 XML 是非常合适的场景

有些人用的 String 拼接,很容易出错,代码可读性差。有些人用操作 XML 的那套 API 生成 XML,比 String 拼接还要惨

2020-04-21 23:19

tomcat 对于 jfinal 中的 WriterBuffer 的误报,关键看这里:
21-Apr-2020 15:58:36.142 SEVERE [localhost-startStop-1] org.apache.catalina.loader.WebappClassLoaderBase.checkThreadLocalMapForLeaks The web application [ROOT] created a ThreadLocal with key of type [com.jfinal.template.io.WriterBuffer$2]

参考这个贴子:
https://jfinal.com/feedback/4720

你给出的日志比较奇怪,因为这个误报只会是 INFO 或者是 WARNING 这个级别,但你这里是 SEVERE 级别,这个就很不正常了

估计是你的 tomcat 在关闭或者重启时没有真正关闭或重启成功,造成了资源泄漏

2020-04-21 11:04

@杜福忠 在 java 代码层面,传入一个 Kv 对象,里头放一些需要用到的参数,然后在模板中通过 #set(...) 或者调用 kv 传递过来的对象,就可以在 java 与 template 之间传递数据了,包括传回返回值

2020-04-21 01:23

正在建生态频道,即将推出

2020-04-21 01:22

@Code_Cat 打成 jar 包以后, java -jar xxx.jar 即可运行

2020-04-20 16:36

下载首页的 jfinal_demo_for_maven.zip, 里头有一个 doc 目录, 其中的一个子目录里面介绍了如何打成可运行的 jar 包

2020-04-20 16:05

你也可以用一个 handler 处理一下:
public class MyHandler extends Handler {
public void handle(String target ,HttpServletRequest req, HttpServletResponse resp, boolean[] isHandle) {
if ( target.startWith("/v1/cart//")) {
target = target.replace("/v1/cart//", "/v1/cart/");
}

next.handle(target, req, resp, isHandled);
}
}

最后再配置一下:
me.add(new MyHandler());

2020-04-20 16:03

这种路径没有关系,你可以多创建一个 action 支持 /v1/cart//64491,然后里头啥也不干,用 forwardAction 转发到你现在写的那个 action 就行,大致如下:

// 你现在的 action 如下
public void cart() {
...
}

// 你新创建的 action 如下:
@ActionKey("/v1/cart//)
public void justForward() {
forwardAction("/v1/cart")
}

一点也不耽误