2018-03-29 11:43

添加个全局拦截器 me.add(new SessionInViewInterceptor())

然后 #(session.keys)

2018-03-28 21:34

大致代码如下:
public void configConstant(Constants me) {
PropKit.use("a_little_config.txt"); // 加载少量必要配置,随后可用PropKit.get(...)获取值
me.setDevMode(PropKit.getBoolean("devMode", false));

JFinal3BeetlRenderFactory rf = new JFinal3BeetlRenderFactory();
rf.config();
me.setRenderFactory(rf);

GroupTemplate gt = rf.groupTemplate;
//根据gt可以添加扩展函数,格式化函数,共享变量等,
}

2018-03-28 20:34

Routes 划分有很多好处:
1:当你的项目足够大时,通常是多人一起开发,可以是一人分一个 Routes,开发时各自改自己的 Routes,在 git 或 svn 提交时不会产生版本冲突

2:每个 Routes 可以独立配置 routes 级别的拦截器,这类拦截器会拦截所有在该 Rotues 中注册的所有 Controller 中的所有 action,这样可以减少大量拦截器配置代码,

例如你的后台需要一个 AdminInterceptor 专门进行后台用户的权限控制,而你前台的 FrontInterceptor 可以专门处前台的拦截

3:有利于模块化

4:可以将所有路由配置拆分至独立的 Routes 类中,避免 YourJFinalConfig 中的代码过多,有助于代码可读性

当然,你完全可以不去拆分,直接用也可以

2018-03-28 20:11

注意看这篇文档红色字体部分的内容:
http://www.jfinal.com/doc/5-3

2018-03-28 20:11

当你的 model 对象调用过一次 dao() 方法以后,就会成为一个 dao,这个 dao 只能用于查询数据库,不能再调用 model.save() model.update() model.set(...) 等方法

这个是为了保障线程安全。解决办法极其简单,不要调用其 dao() 方法即可。

如果你的这个 model 本来就是为了成为 dao 的,天然就不该去调用其 save() update() 之类的方法

2018-03-28 11:46

@混世侃 传小数点参数用问号挂参: http://abc.com/action?value=3.14

或者 post 请求体中传参

2018-03-28 10:45

jfinal 开发的项目是标准的 Java web 项目,而 netty 提供了运行 java web 的机制

因此,只要看一下 netty 官方的如何运行 java web 项目的文档即可,这整个过程对 jfinal 项目来说是透明的

2018-03-28 10:43

通过下面的代码来定制输出目标:
com.jfinal.core.ActionReporter.setWriter(Writer writer)

setWriter 方法中的 Writer 参数提供一个自己的实现,可以输出到任何地方

2018-03-28 10:41

可以配置成别的,例如设置成下划线:me.setUrlParaSeparator("_");

如果原有程序对减号已经有很多依赖,可以通过 String paras = getPara(); 先获取所有参数,然后自己再转换一下

如果上面的办法无法解决,还可以在发送参数的时候先转成别的字符,到后端再转回来

还有一个办法是碰到这个情况用问号挂参传递一下

2018-03-27 18:40

在 Handler 中对 mp3 的请求判断权限

Handler 可以接管所有请求

2018-03-27 18:39

public void listFan() 方法的返回值类型为 void , 怎么可能获取得到呢?

前面的回复已经很明确了

2018-03-27 18:32

@齐天大圣_new 多看看 Cron4jPlugin 的配置文档

2018-03-27 18:31

@齐天大圣_new 你照抄了这个贴子中的配置,配置里头有 cn.cyansoft.xine.task.NewTask,你去掉它,或者改成你自己的即可

2018-03-27 18:15

@齐天大圣_new ClassNotFoundException 缺少 jar 包