这两天研究了下@JFinal框架,这框架很不错。是我一直在寻找的框架类型。不过在做Demo的时候,发现在Validator验证失败时候,总是报错。Demo是模仿官网提供的例子做的。例如我创建的Controller中有save方法,保存之前要先验证输入参数的验证,官网提供的例子,在保存之后没有指定跳转的ftl(我习惯使用ftl做扩展名) 页面,按理说应该是跳转到index的,但是一直提示save.ftl页面找不到。。。强烈想知道JFinal的运行原理。
package com.yyqz.www.controller; import java.util.List; import com.jfinal.aop.Before; import com.jfinal.core.Controller; import com.yyqz.www.interceptor.DemoUserInterceptor; import com.yyqz.www.model.DemoUser; import com.yyqz.www.validator.DemoUserValidator; /** * DemoUser的Action * @author gongstring * */ @Before(DemoUserInterceptor.class) public class DemoUserController extends Controller { public void index() { setAttr("datas", DemoUser.dao.find("select * from demo_user")); render("index.ftl"); } public void add(){ System.out.println("新增方法"); // render("edit.ftl"); } @Before(DemoUserValidator.class) public void save() { getModel(DemoUser.class).save(); // index(); } public void edit() { DemoUser user = new DemoUser(); if(getParaToInt() != null){ user = DemoUser.dao.findById(getParaToInt()); } setAttr("demoUser", user); } @Before(DemoUserValidator.class) public void update() { getModel(DemoUser.class).update(); } public void delete() { DemoUser.dao.deleteById(getParaToInt()); } }
package com.yyqz.www.validator; import com.jfinal.core.Controller; import com.jfinal.validate.Validator; import com.yyqz.www.model.DemoUser; public class DemoUserValidator extends Validator { @Override protected void handleError(Controller c) { c.keepModel(DemoUser.class); } @Override protected void validate(Controller c) { validateRequiredString("demoUser.user_code", "userCodeMsg", "请输入用户名!"); validateRequiredString("demoUser.user_pass", "userPassMsg", "请输入密码!"); } }
在handleError方法中调用一下render方法就可以了,如下所示:
protectedvoidhandleError(Controllerc){c.keepModel(DemoUser.class);c.render("xxx.ftl");}如果校验失败,并且没有在handleError中调用render,那么JFinal会默认调用一个render方法,约定的view如下:
view=viewPath+method+viewExtension
viewPath是在添加路由时指定的,method是指当前调用的Controller中的method,viewExtendsion是指视图扩展名,freemarker默认为".html"
在handleError方法中调用一下render方法就可以了,如下所示:
protectedvoidhandleError(Controllerc){c.keepModel(DemoUser.class);c.render("xxx.ftl");}如果校验失败,并且没有在handleError中调用render,那么JFinal会默认调用一个render方法,约定的view如下:
view=viewPath+method+viewExtension
viewPath是在添加路由时指定的,method是指当前调用的Controller中的method,viewExtendsion是指视图扩展名,freemarker默认为".html"
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。