这两天研究了下@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"