2018-05-22 21:30

@kun 不需要开发另外的功能,本来就有了,而且在 /_view/_admin/common/_menu.html 以及 /_view/_admin/permission/index.html 中已经有过演示

这里再给一个最细粒度的 _menu.html 中的演示:
#permission("/admin/account")
<li>
<a href="/admin/account"<账户管理</a>
</li>
#end

通过上面的方式在 _menu.html 中为每个菜单埋好点以后,在后台管理中可以任意细料度控制菜单权限给任何账号,用我这个例子试一下就知道有多方便了

2018-05-22 21:25

还有一个简单办法是在你原有 sql 外面再套一个 select *:
select * from ( 原 sql 在这里 ) as temp

最后的用法是:
paginate("select *", "from ( 原 sql 在这里 ) as temp", ...)

2018-05-22 21:24

jfinal 为这种情况专门准备了 paginateByFullSql 方法,具体用法在这里有:
http://www.jfinal.com/doc/5-6

分页查询获取 totalRow 这个数据的时候需要用正则移除 order by 子句,而 sql 可以是很复杂的嵌套结构,如果要考虑各种情况用正则将 order by 移除干净,性能会很差

而绝大部分情况下的 order by 是可以用简单正则处理的,因为用 paginateByFullSql 来支持复杂 order by 是最佳方案

2018-05-22 11:57

具体是啥问题呢? 我没碰到过, 很久没用 oracle 了

2018-05-22 11:55

先生成 Session Account ,然后再要求添加自己想要的方法即可

生成器在下次生成时,只会自动再次生成 base model MappingKit , 而 Model 已存在,则会跳过,所以你以前在 Session Account 中添加的代码不会被覆盖

2018-05-22 11:53

多试一下,功能都在的,可以配置出来

2018-05-22 11:53

使用 #role #permission 在需要的地方埋好点,通过权限管理模块自动化配置出来这些控制,不用改 html

2018-05-22 11:51

缓存的使用,粒度可粗可细,成本可高可低,需要视不同的场景选择最划算的方案

我这里简要说一个简单有效的方案:
1:对于 bean/model,使用 cache.put(id, bean) 的方式来缓存

2:在 Service 层添加 XxxService.get(List idList) 以及 get(Integer id) 的业务方法,该方法自动处理缓存的问题,外界通过 id 号就可以透明化地获取到 model/bean ,完全无需在关心 cache

3:对于 List beanList 这类列表,里头的 bean/model 只放 id 号,也就是一个 List idList

4:任何对于列表的查询,都只返回 select id,返回数据以后,再通过 XxxService.get(List idList) 获取数据

这样做的主要好处是,避免了各处分别缓存 model/bean 后需要数据同步的问题,也就是说 bean/model 只在内存中缓存一份来共享,更新缓存只需要更新一处

当然,还有别的一些好处,大家可以多多思考一下

2018-05-21 18:06

看一下 DruidPlugin 中的源码即可

本质就是一个 JDBC 连接而已,网上搜索 JDBC 连接数据库,很多资源

2018-05-21 17:55

@lhhhhh @lhhhhh 就是这个原因了, 让这个 class path 中有就可以了

2018-05-21 17:38

独立使用时,需要通过下面的方法来启动:
new EhCachePlugin().start();

2018-05-21 17:37

去 class path 里头看一下现场,看 config.properties 这个文件到底存在不存在

不要看 /src/main/resources 下面,要看被编译后的那个 class path 里头,PropKit 是从 class path 去找文件

2018-05-21 11:11

如果你用的是 jfinal 的 sql 管理功能,那么就极其容易:
#define where(map)
where
#for ( x : map)
#(for.first ? "", "and") #(x.key) #(x.value)
#end
#end

使用的时候调用一下 where 函数即可:
#@where(condMap)

详细文档在此:
http://www.jfinal.com/doc/5-13

2018-05-21 10:49

http://www.jfinal.com/doc/9-1

2018-05-21 09:45

还想到一个办法,大致如下:
1:创建 public class MyRequest extends HttpServletRequest

2:MyRequest 通过构造方法,将原 request 传入
public MyRequest(HttpServletRequest request) {
this.request = request;
}

3:在 MyRequest 中覆盖掉父类的 getWriter()、getOutputStream(),将这两个方法的返回值替换成自己希望输出的目的地,例如:
public Writer getWriter() {
// 这个 MyWriter 是你定制的写入到的一个目的地,用于接收生成的结果
new MyWriter(super.getWriter());
}

4:除了 getWriter()、getOutputStream() 以外,其它方法者转调 request 对象中的方法,例如:
public String getParameter(String name) {
return this.request.getParameter(name);
}

通过上面的方式,相当于通过包装 HttpServletRequest request 的方式,将输出目的地重定向到了你自己想要的地方