2019-02-18 15:57
@王子鹏 跳转在本质上与后端的 render 无关,既然你是 ajax 请求,在得到后端的数据以后,只能用 javascript 代码实现跳转
跳转的目标 url,可以是后端传过来的,例如:
Ret ret = Ret.ok("url", "/users");
renderJson(ret);
success : function(ret) {
if (ret.state == "ok") {
window.loacation.href = ret.url;
}
}
2019-02-18 11:26
后端使用 renderToString 配合 renderJson 来使用, 而不是直接使用 render,大致如下:
String html = renderToString("xxx.html");
Ret ret = Ret.ok("html", html);
renderJson(ret);
前端 ajax 大至如下:
success : function(ret) {
alert(ret.state);
alert(ret.html);
}
其中 ret.state 是 Ret.ok 设置的一个状态,有两种状态:"ok" 与 "fail"
这两个状态可以这么来判断:
if (ret.state == "ok")
if (ret.state == "fail")
还可以在后台传入更多数据,例如:
Ret ret = Ret.ok("html", html);
ret.set("key1", 123).set("key2", 456);
renderJson(ret);
在前台通过 ret.key1、ret.key2 获取
2019-02-18 11:17
@tianya 这个就奇怪了。 不过就算是 sessionId 变化了,但你通过 getSessionAttr(key) 仍然是可以获取到数据的
对于 session 的操作,不要直接使用 sessionId,而是直接使用 session 操作的 API,例如:
setSessionAttr(...)
getSessionAttr(...)
getSession(true).setAttribute(...)
getSession(true).getAttribute(...)
这样就绕开了 session id
2019-02-18 11:14
从 response.getWriter() 得到的 Writer 无需自己关闭,web 容器负责关闭它,看一下 java web 相关类中的文档可知
如果你主动关闭,会出下面的问题:
1:在某些 web 容器下,如果在你正发送数据时客户端主动断开连接会报异常,如 undertow 之下
2:拉低性能
早期的 jfinal 版本是主动关闭 Writer 与 OutputStream 的,是多年的打磨改进成现在的样子的
注意,上面所指仅限于 java web 规范中从 HttpServerletResponse response 对象中获取的 Writer 与 OutputStream,不能自行 close(), 其它情况多数需要自己 close(),如 FileOutputStream
2019-02-17 19:29
@tianya 那应该是老版本 jfinal undertow 的依赖没有消除,jfinal undertow 1.5 修复过这个问题,你再试试
2019-02-17 16:04
@yangzhiwen 用于 sql 管理的 Engine 可独立配置 devMode ,配置方法如下:
activeRecordPlugin.getEngine().setDevMode(true)
也可以这样:
activeRecordPlugin.setDevMode(true)
上面这个与前面那个是打通的,两种配置完全等价
重点:由于同一个项目中通常使用了多个 Engine 对象,用于不同的用途,所以这些 Engine 对象需要被单独配置,保障互不干扰
关于独立配置特意补充了相关文档:
http://www.jfinal.com/doc/6-2
2019-02-17 15:56
大概率是 login 上的拦截器发现没登录,给重定向到 index
使用 @Clear 清掉 login 上的拦截器
2019-02-17 14:42
@moyush 将资源放在 E:/xxx/xxx/XXX 之下,然后配置:
undertow.resourcePath=src/main/webapp, E:/xxx/xxx
这样实际目录就多出来一层 "XXX",正好是要访问的路径