2018-02-01 16:41

@188085240 sql 管理的模板引擎默认用的 FileSource,这个就代表从文件中读取 sql 模板内容,而你可以模仿 FileSource 写一个 DbSource,改而从数据库读 sql 模板内容

做到上面的程度以后,剩下的用法就完全一样了

当然,你存放在数据库中的 sql 模板内容要与存放 sql 文件模板中的内容在格式上要一样,例如下面的格式:
#sql(...)
select * from ...
#end

看下 ActiveRecordPlugin 那一章的 sql 管理相关文档

2018-02-01 16:34

paginate 这个模板函数里面有个 append 变量就是干这事的,这样来用:
#set(append="?key=" + value)
#@paginate(...)

注意 paginate 这个模板函数,是指 jfinal 官网提供的 demo 中定义的那个

2018-02-01 16:30

实现一下 ISource 接口, 完成从数据库读取模板内容的功能:
public class DbSource implements ISource {
...
}

然后再实再一下 ISourceFactory,完成 DbSource 的构建:
public class DbSourceFactory implements ISourceFactory {
...
}

配置生效:
activeRecordPlugin.getEngine().setSourceFactory(new DbSourceFactory());

最后在 java 代码中就可以这样来用了:
SqlPara sp = getSqlPara(key);
Db.use(...).find(sp);

注意,以上只是示例,里头有些细节需要你自己完善,单步调试搞清楚原理

2018-02-01 16:22

where keyid=#(keyid) 这个是什么用法? 这个不是在模板中,而是在 java 源代码中

改为:where keyid=?

2018-02-01 15:38

这个问题比较奇怪,因为你的前两个参数 blogPage.pageNumber、 blogPage.totalPage 都是动态的了,为何第三个参数就不能?

2018-02-01 15:20

在浏览器中点鼠标右键,查看生成的最终 html 是不是对

2018-02-01 15:19

时间取你运行这个程序的电脑上的时间,cron 表达式看一下 jfinal 文档:
http://www.jfinal.com/doc/9-2

2018-02-01 15:16

jetty-server 这个依赖要将 provided 改为 compile,注意打包时又要再改回去,以免将 Jetty 的 jar 打进去

2018-02-01 15:15

业务通知是由你的业务触发的,时机千变万化,例如你的业务有一个独立的线程,每隔一分钟检测数据库是否有要发送的通知,有的话就查询数据库然后调用
TemplateMsgApi.send(...)

2018-02-01 15:13

@海涛大大 再多看看 jfinal 文档模板引擎的 表达式 与 指令 部分,花不了多少时间,20 分钟彻底学会这两者的用法

2018-02-01 15:11

mysql 触发器貌似不能直接调用 java 和 js,或许有某种桥接机制,例如用 socket 通信,找找相关资料

2018-02-01 00:36

做个拦截器,然后在 inv.invoke() 之后用一下 inv.getController().getRender()即可:
public void intercept(Invocation inv) {
inv.invoke();
Render render = inv.getController().getRender();

if (render intanceof XxxRender) {
...
}
}

2018-02-01 00:34

指令内部不能使用 #[[ ]]#

指令内部只能使用表达式,注意看表达式文档中所提到的各种表达式,是不可能包含 #[[ ]]# 这些东东的

所以改成:#(getImage(100,100, "{{d.image}}")) 即可