2017-08-15 16:09
在 YourJFinalConfig extends JFinalConfig 中添加一个方法解决一下,大致如下:
private void loadConfig() {
// 加载用于指定开发模式的配置文件
PropKit.use("application.properties");
// 读取 dev 模式
boolean dev = PropKit.getToBoolean("dev");
// 移除默认的配置文件,第一个被 use 的文件会成为默认配置文件
PropKit.useless("application.properties");
if (dev) {
PropKit.use("application-dev.properties");
} else {
PropKit.use("application-prod.properties");
}
}
然后在 configConsant(Constants me) 方法的第一行处调用一次即可,如果希望更简单,最的的四行代码可以这样:
PropKit.use(dev ? "application-dev.properties" : "application-prod.properties");
在 jfinal 之下,大概是 5 行代码可满足这个需求,但同时又不限定你的配置文件名称,少了一些约定,学习成本低
2017-08-14 21:25
@lyq027 用一个 UrlHandler 做个转换就可以了,大致如下:
1:v1、v2、... vn 当成是参数来处理
2:这类 url 通过 UrlHandler 全转换为指向 ApiController
3:转换方式为 "/api/v*/method?params" 转成 "/api/method/v*?paras
4:转换完成以后,通过 getPara(0) 即可获取到 "v1"、"v2"、..."vn" 这类参数值
转换代码可以通过正则,也可以通过简单的字符串处理代码:
public void handle(String target, req, resp, isHandled) {
if (target.startsWith("/api/v")) {
String prefix = target.substring(0, 4);
String post = target.substring(7);
String version = target.substring(5, 6);
target = prefix + post + "/" + version;
}
next.handle(target, req, resp, isHandled);
}
当然,为了简单性上面代码假定了你的版本号为 2 个字符,需要你自己调整,在此仅为示例
简单一句话,就是将 target 转换成指向正确 action 的 url 值就好
2017-08-14 17:38
@ThreeX 我倒是建议,直接用绝对路径:
renderTemplateToString("/path/file.html");
这类方法使用应该不多,偶尔不用 viewPath 还可以,除非你大量在用这个方法
2017-08-14 17:27
建议用一个拦截器辅助来做一下,添加一个拦截器,并通过如下代码将 viewPath 存放在 ThreadLocal 中:
public ViewPathInterceptor implements Interceptor {
private static final ThreadLocal threadLocal = new ThreadLocal();
public void intercept(Invocation inv) {
threadLocal.set(inv.getViewPath);
try {
inv.invoke();
} finally {
threadLocal.remove();
}
}
public static String getViewPath() {
return threadLocal.get();
}
}
然后在 BaseController extends Controller 中覆盖掉原先的 renderTemplateToString 方法,先通过 ViewPathInterceot.getViewPath() 获取到 viewPath,然后再与 template 参数组合一下即可
2017-08-14 17:15
@咔嚓 在本站首页右侧下载 jfinal 手册,其中有一章内容专门讲了模板引擎的用法
2017-08-14 16:53
@昔竹 如果是 debug , 这是正常的调试信息不需要理会,否则应该是缺包, 把缺少的包找对了就搞定了