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