2018-05-22 22:42

new User().find(sql) 这个报空指针,肯定是没添加是添加映射:
arp.addMapping("user", User.class);

当然,这个映射在 jfinal 中是可以用生成器自动搞定的,下载首页的 jfinal demo,里头有例子,看一下 _MappingKit.java 这个类

如果希望 jetty 不要频繁启动又关闭,可以将启动参数中的最后一个参数 5 改为 0

2018-05-22 22:40

在 jfinal 下可以像呼吸空气一样自然的拥有 formula 的功能,而不用像 hibernate 那样先要弄个属性在 bean 中, 还要用 XML 配置这个属性指向的哪个 select field

jfinal 中是这样用的:
Articel article = findFirst("select a.*, u.nickName from article a inner join user u on a.userId = u.id where a.id = ? limit 1", 123);

上面的代码就可以将 user 表中的 nickName 给弄到 article 中去,然后这样来读:
String nickName = article.getStr("nickName");

jfinal 的 model 也是可以自动生成 getter setter 方法的,具体看一下首页的 jfinal demo 中的用法

2018-05-22 22:33

文档中补充了相关内容:
http://www.jfinal.com/doc/5-7

2018-05-22 22:02

@ben0133 如果不是默认数据源,对于 @Before(Tx.class) 拦截器方案来说,需要再添加一个配套的注解,例如:
@TxConfig("另一个数据源名,也即configName")
@Before(Tx.class)
public void method() {
...
}

对于 Db.tx 做事务来说,如果不是主数据源需要用下面的方式:
Db.use("另一个数据源名,也即configName").tx(...);

2018-05-22 21:57

@暖色demon 如果 pc 与移动端相同业务都跳到同一个 action ,那么你得使用 Handler 来改变一下 String target 值去跳过去

至于跳到不同的页面,使用拦截器就可以了,假定你的 action 中的 render 方法默认是针对 pc 端的大致代码如下:
inv.invoke();

if (isMobileRequest(inv.getController().getRequest()) {
Render render = inv.getController().getRender();
render.setView("/mobile/" + render.getView());
}

if 里头对于 setView 参数的细节你自己要调整一下,上面仅为演示如何调整 view 值

当然,还有一个更简单的办法是添加一个 public class BaseController extends Controller,在这个 BaseController 中覆盖掉父类中的 render 方法,大至如下:

public void render(String view) {
if (isPcRquest()) {
render("/pc/" + view);
} else {
render("/mobile/" + view);
}
}

然后让你的所有 controller 继承这个 BaseController 即可,在实际开发中引入 BaseController 极其有用

2018-05-22 21:47

解决办法大致如下:
1:以 controller 中通过 getRequest() 得到 HttpServletRequest 对象

2:利用类似于 commons-fileupload 这样的文件上传组件解析前面得到的 request 对象,从中得到文件内容,项目在此:
https://www.oschina.net/p/commons-fileupload

3:最后再调用一下 renderNull() 即可

jfinal 使用的是 cos 来解件文件上传内容,但这个组件里头的 maxPostSize 也是用的 int 型,所以肯定无法解决你的问题

假如 common fileupload 也是用的 int 来决定的 maxPostSize,那你就只能自己写代码来解析文件上传文件了。当然在写解析代码时可以将 common fileupload 相关代码拿来使用

2018-05-22 21:34

@Sohnny 通过继承 MetaBuilder,覆盖掉出错的那个方法,自行处理一下就好

2018-05-22 21:33

@飒飚 controller 中的方法在别的地方不能直接调用,只能自己 copy 出来使用

cookie 的代码也可以参考 controller 中的写法 copy 出来用

验证码直接用 renderCaptcha() 即可
先在浏览器的地址栏手动输入 URL,访问这个 renderCaptcha() 的 aciton 成功能,再将这个 URL copy 到 img 的 src 中即可

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

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