关于Jfinal控制器与视图匹配的一点疑惑

官方提供下载的demo里面,Blog控制器是这样写的

public class BlogController extends Controller {
    public void index() {
        setAttr("blogPage", Blog.me.paginate(getParaToInt(0, 1), 10));
        render("blog.html");
    }
    
    public void add() {
    }
    
    @Before(BlogValidator.class)
    public void save() {
        getModel(Blog.class).save();
        redirect("/blog");
    }
    
    public void edit() {
        setAttr("blog", Blog.me.findById(getParaToInt()));
    }
    
    @Before(BlogValidator.class)
    public void update() {
        getModel(Blog.class).update();
        redirect("/blog");
    }
    
    public void delete() {
        Blog.me.deleteById(getParaToInt());
        redirect("/blog");
    }
}



其中的add、edit函数,既没有redirect到某个地址,也有render某个模板,是默认就寻找跟函数名一样的模板来渲染了吗?还是说,这只是这个例子特有的设置?


评论区

杜福忠

2016-08-11 08:23

打个断点,一路狂按F5,就知道其中的奥妙了

杜福忠

2016-08-11 09:28

com.jfinal.core.ActionHandler 里的 handle 方法>>第95行(2.2版);

if (render == null)
render = renderFactory.getDefaultRender(action.getViewPath() + action.getMethodName());
render.setContext(request, response, action.getViewPath()).render();

JFinal

2016-08-11 10:04

当 action 中没有调用 render 时,jfinal 会默认给你调用一个 render(view),其中
view = baseViewPath + viewPath + methodName + 模板扩展名

1:baseViewPath 通过 me.setBaseViewPath(...) 进行配置
2:viewPath 是在配置路由的时候通过 me.add(controllerKey,controllerClass, viewPath) 方法的第三个参数进行配置,如果第三个参数未指定则默认与 controllerKey值相同
3:methodName 就是 controller 中的方法名
4:当 viewPath 以"/" 打头时 baseViewPath 不起作用,这样设计是让 viewPath有机会回到根路径

雁起平沙

2016-08-11 12:08

@JFinal 还有这样的黑科技啊 文档里也没有提到

雁起平沙

2016-08-11 12:22

感谢各位的耐心解答

JFinal

2016-08-11 13:59

@雁起平沙 文档中只提供了最常见的用法,因为 jfinal 的功能太多了,要写出详细的文档太费时间,大家也不一定去看,而且过多文档会给开发者带来心理负担。jfinal 代码量少,有些问题看看源码比看文档要快

FS心情

2016-08-12 12:19

@JFinal 希望大神还是出一个官方api吧,还有一些插件的文档,方便我们这些小白看看

JFinal

2016-08-12 12:21

@FS心情 在个人空间还有一点点功能完善好以后,会立即出一个官方 API 频道,文档详细到方法的参数代表的意思,使用案例代码,多多关注社区动态

FS心情

2016-08-12 15:20

@JFinal 太棒了,期待中!

zz210891470

2017-09-08 19:30

@JFinal JFinal默认视图模板是freemarker吗

JFinal

2017-09-08 20:12

@zz210891470 jfinal 3.0 以前的所有版本默认视图是 freemarker,之后的所有版本默认视图是 jfinal 自带的 enjoy 模板引擎

zz210891470

2017-09-09 11:08

@JFinal 请问老大,JFinal有没有可以对各个模块单独设置视图路径的方法,比如我的User模块 设置基础视图路径 为"/user"

JFinal

2017-09-09 13:06

@zz210891470 试用一下 configRoute(Routes me) 中的 me.setBaseViewPath(....) 以及 me.addInterceptor(...),详情见 jfinal 手册

jettyWang

2017-09-11 10:07

@zz210891470 默认是jfinal模板,源码自己看看就好了