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: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 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 只在内存中缓存一份来共享,更新缓存只需要更新一处
当然,还有别的一些好处,大家可以多多思考一下