2018-12-03 16:54

@杜福忠 serverless 这类 api 太束手束脚了

话说用上阿里的 serverless 以后,为啥还需要 jfinal 呢?

2018-12-03 16:53

@shiweixian tomcat、jetty、undertow 的源代码我者读过,jetty 顶层架构不错,但代码质量最差, tomcat 代码质量也较差,而且很复杂,而 undertow 的代码质量与设计是最好的

jfinal 选择一个可依赖的底层是极为慎重的,jfinal undertow 要解决的核心问题是极速部署

2018-12-03 16:50

@jimchow 创建一个全局拦截器即可,在拦截器中可以通过下面的代码获取注解:
Valid valid = inv.getMethod().getAnnotation(Valid.class);
然后就可以使用你自己定义的这个 valid 注解做你想你想做的事情了

2018-12-03 16:48

将 cron 表达式设置成五个星号,先确保调度正确被调度这是第一步

第二步才是将 cron 表达式改成确切需要的值

第一步没问题才是进入第二步的前提, 如果第二步有问题,调整 cron 值就好,这个值的调整方式在 jfinal.com/doc 有详细说明,对照着那个 cron 规则改好就行

2018-12-03 14:55

试试分别设置不同版本的 driverClass,如果有的话

2018-12-03 12:45

老版本 jfinal 启动参数,在 IDEA 中最后一个 int 参数设置为 0 就好,不能省
JFinal.start(..., 0);

2018-12-03 12:40

这个是 java 基础,建议先复习一下 Java 基础,再开始使用 jfinal

2018-12-03 10:56

@shiweixian 打包的时候在 package.xml 里面配置一下将 jfinal-scheduler-2.2.0.jar 复制到 lib 下的配置,里面已经有了一些复制文件的示例,照抄即可

2018-12-03 10:54

简洁方便,快捷,感谢分享

话说阿里也学 amazon 在玩 serverless 了?

2018-12-03 10:53

感谢分享

2018-12-03 10:52

jfinal 模板没有继承功能,上述的 #include 功能,仅仅是将目标模板原样不动放在 #include 指令所在之处

而 #@layout() 是模板函数调用,#define content() 是模板函数定义,这里面只有极其简单的函数定义与调用,再也没有任何其它的概念

如果你希望实现类似于重写父类板的某些 html 代码,起码有如下两个方案:
1: 将被 #include 模板中的需要变化的部分使用变量开放出来,例如先用 htmlFragment做好埋点工作:
#if (htmlFragment)
#(htmlFragment)
#else
这里放上htmlFragment 不存在时的默认 html 内容
#end

然后,在主模板中为 htmlFragment 赋值即可:
#inlcue("_layout.html")
#set(htmlFragment = ....)
#@layout()

当然,这个 htmlFragment 内容比较多的时候,可以使用 #string 指令来做:
#string(htmlFragment)
这里放大量 html
#end

2: 第二个方法是在需要变动的地方放上模板函数的安全调用,例如:
#@htmlFragment?()
注意上面的函数名后方有个问号,就是说函数存在时才真正调用,不存在则跳过

由于 jfinal enjoy 的功能极为简洁强大,所以还有很多其它办法,例如自定义指令实现类似多态的功能等等,这种扩展是最彻底最直接的,看一下 Directive 抽象类中的注释,进行扩展即可

2018-12-02 12:39

在 FreeMakerRender 中的 render() 方法中调试一下,看具体是什么行为

默认是去 src/main/webapp 下面去找模板,你删掉项目根目录下面的 webapp , 只保留 src/main/webapp 试试

2018-12-02 11:39

根据异常提示去找原因,我们用着都没问题,你手动修改的那个地方对于部署可能会造成问题,你测试一下

2018-12-02 11:39

异常提示的是:Template not found for name "/templates/demo.ftl".

那么将模板文件放在 webapp/templates 下面即可

2018-12-01 12:03

其实,只要单步调试一下 com.jfinal.token.TokenManager 以及 validateToken() 内部工作机制,很容易就明白怎么做了,代码量极少,不超过 100 行