2017-06-28 11:30
很早以前碰到过几个小伙伴也这么来玩的,后来慢慢也改成严格的 MVC 走 action了,因为纯静态页面很少很少,多数是要在页面中使用动态数据的,如果直接走页面,势必要在页面中通过某种方式再去访问数据,这种结构不如 MVC 清晰好维护
当然,在 jfinal 下是很容易支持这种模式的,你甚至可以只有页面和一些工具类,大致这么来玩:
1:创建一个 Handler 用于接管所有请求,将请求直接生成String templateFile 这个对象指向模板文件,大致如下:
public void handle(target, req, res, isHandled) {
String templateFileName = buildTemplateFileName(target);
Engine.use().getTemplate(templateFileName).render(...);
isHandled[0] = true;
}
2:创建一些用于操作数据库的工具类,或者直接用 jfinal 的数据库工具类配置给 Engine
Engine.use().addSharedObject("Db", Db.use());
3:在页面可以这样用了:
#for ( x : Db.find("select * from account where ..." ...))
#(x.userName)
#end
通过上面的方式,你可以完全避免掉 Controller、Interceptor、Render 等所有的东东,一般我不告诉小伙伴们这么来玩
2017-06-27 10:17
@liuzy666 服了你了,整合 ueditor 根本不需要 jsp,你仔细看一下 jfinal club 项目,用一个 UploadController 就可以将 ueditor 的所有需要 jsp 的地方接管了
而且可以删掉 ueditor 里面所有 jar 包,所有 jsp 文件,根本不需要
2017-06-24 10:54
@白山 全局拦截器与 web.xml 无关,拦截器的配置在 jfinal 手册中有详细的说明,在本站首页下载 jfinal 手册,一看就全明白了
2017-06-24 10:33
@snakelenas 已经改进了,改成了下面的方式:
protected void toKeyValue(String key, Object value, StringBuilder sb, int depth){
sb.append('\"');
if(key == null)
sb.append("null");
else
escape(key, sb);
sb.append('\"').append(':');
sb.append(toJson(value, depth));
}
后续我也会继续留意这个 JFinalJson 的其它地方有没有可以优化的地方,暂时先优化这个地方,再次感谢 !
2017-06-24 10:26
几乎都是用的全局拦截器来实现这个功能,下面贴出本站的相关代码片段:
public class LoginSessionInterceptor implements Interceptor {
public void intercept(Invocation inv) {
Controller c = inv.getController();
String sessionId = c.getCookie(LoginService.sessionIdName);
if (sessionId != null) {
Account loginAccount = LoginService.me.getLoginAccountWithSessionId(sessionId);
if (loginAccount == null) {
loginAccount = LoginService.me.loginWithSessionId(sessionId);
}
if (loginAccount != null) {
// 用户登录账号
c.setAttr(LoginService.loginAccountCacheName, loginAccount);
} else {
// cookie 登录未成功,证明该 cookie 已经没有用处,删之
c.removeCookie(LoginService.sessionIdName);
}
}
inv.invoke();
}
}