2017-12-04 16:08

再补充一下,上面的所说的一切,仅仅针对于 #define 定义的 template function 而言,而表达式中调用 java 方法时,与 java 规则完全一样,例如:
#("abc".substring(1))
#("abc".substring(0, 2))
上面的 substring 方法调用的是 java 中的 String 类型的两个重载过的 substring 方法,这类调用是支持通过不同的参数个数、不同的参数类型,去调用不同的重载方法的

除了上面的调用 java 类上的方法以外,jfinal 的 shared object、shared method、extension method 这三种扩展全都支持方法重载

2017-12-04 16:03

用 #define 定义的 template function 的参数个数是固定的,除了性能方面的考虑,本质上是模板引擎是动态类型,不方便像java一样通过类型去判断调用的是哪个重载方法。

此外, template function 天然就支持更方便的传参方式,所以就更加没有必要像 java 那样实现,例如,你可在定义时只使用一个参数,例如:
#define layout(map)
#(map.title)
#(map.desc)
#end

传参的时候这样:
#@layout({title : "JFinal 极速开发社区" , desc: "天下武功,唯快不破"})
通过上面的方式,你可以传递任意类型,任意数量的参数进去


除了以上的方式传参以外,还可以通过 #set(...) 指令在模板中任意传参,例如:
#define layout()
#(title)
#(desc)
#end

用的时候这样:
#set(title = "JFinal", desc = "天下武功,唯快不破")
#@layout()
第二种方式相当于将参数从调用向前挪到了 #set 指令中

通过上面两种用法可以看出来,虽然 jfinal enjoy 引擎没有通过参数个数与参数类型进行函数重载,但传参可以更加自由灵活。

本质上是因为动态类型不方便通过参数的变数来实现重载

2017-12-04 11:22

如果是在 jfinal 中用,那么 @杜福忠 的分享就极好

如果是整合在 spring 中用,需要在 spring 的配置文件中为 不同的 ViewResolver 配置上不同的 order、suffix,重点关注册 spring 的配置就可以了

2017-12-02 17:21

前端弄一个 nginx 做负载均衡,后面是多个 tomcat,后面的 tomcat 每个管一个项目,升级的时候停掉 tomcat 一个个来升级项目

某一个 tomcat 停掉的时候, nginx 发现不能连通,会自动将请求转发给连通的 tomcat,这样就可以实现 24 小时不停服升级

这种架构属性于集群部署,所以 session 之类的就必须工共享,每个项目实例不能存放可修改的状态,否则会有问题。 当然,如果应用不是很关键,是可以允许这种情况的

2017-12-02 17:18

这个显然是与 jfinal 无关的,项目都部署上去了,关于项目的生命周期全掌握在 tomcat/jetty 等这类 server 手里头了

不建议在生产环境玩热部署,java 在这方面不足,热部署仅用于开发环境

2017-12-02 11:40

添加拦截器 @Before(NotAction.class) 或者方法不要弄成 public 的

2017-12-01 17:54

页面直接 #(key) 即可,这里的 key 是 map 中的 key

2017-12-01 17:53

用好 jfinal 的 ActiveRecordPlugin 可以解决

2017-12-01 17:50

直接使用 put 方法就好

2017-12-01 17:49

action report 仅用于开发阶段输出一些有利于开发的指示性信息,生产环境要关闭这个 me.setDevMode(false);

你碰到的情况我也是头一回碰到,System.out.print 终归是要向某处输出数据,可能是这个输出的目标有问题,建议关闭开发模式测试一下

也可尝试一下 ActionReporter.setWriter(...) 将输出定向到别处去

2017-12-01 12:14

拦截器是针对 action 来说的,如果想针对 Url 来做 AOP,可以使用 Handler 机制,在 com.jfinal.ext.handler 中有一些实例,可以参考一下

2017-12-01 12:07

按理说 mysql 的 timestamp 类型才会有这个行为,你使用的是 datetime,应该没这事,检查一下字段类型是否是 timestamp

2017-12-01 12:05

注意看 jfinal 手册第三章,第三小节

专门讲了 action 带参的用法,主要是几点:
1:要使用 jfinal-java8 这个版本
2:使用 JDK 8
3:开启 java 8 的编译参数 parameter,在编译时保留 parameter name

2017-12-01 12:01

@jianggr 问题解决没?

2017-12-01 11:52

注意看一下 jfinal 手册第一章,第 9 小节,里面有对于这个事的明确声明

另外,如果是用 tomcat,建议参考一下这篇博文:
https://my.oschina.net/jfinal/blog/353062