JFinal的验证框架验证失败时是什么原理

傲娇字符 发布于 2013/01/02 22:55
阅读 1K+
收藏 1

这两天研究了下@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", "请输入密码!");
	}

}

加载中
0
JFinal
JFinal

    在 handleError 方法中调用一下 render方法就可以了,如下所示:

protected void handleError(Controller c) {
  c.keepModel(DemoUser.class);
  c.render("xxx.ftl");
}

    如果校验失败,并且没有在 handleError中调用 render,那么 JFinal 会默认调用一个render方法,约定的view如下:

view = viewPath + method + viewExtension

    viewPath是在添加路由时指定的,method是指当前调用的Controller中的method,viewExtendsion是指视图扩展名,freemarker默认为 ".html"


0
傲娇字符
傲娇字符

引用来自“JFinal”的答案

    在 handleError 方法中调用一下 render方法就可以了,如下所示:

protected void handleError(Controller c) {
  c.keepModel(DemoUser.class);
  c.render("xxx.ftl");
}

    如果校验失败,并且没有在 handleError中调用 render,那么 JFinal 会默认调用一个render方法,约定的view如下:

view = viewPath + method + viewExtension

    viewPath是在添加路由时指定的,method是指当前调用的Controller中的method,viewExtendsion是指视图扩展名,freemarker默认为 ".html"


谢谢大哥,我也估摸是在什么地方要加一个,看来官网的例子似乎要加一个,以免有误导之嫌。这个框架确实很不错,之前我也自己做过一个类似的轮子,不过总感觉性能不行,这个应该还不错,先做个小项目试下性能怎么样。尽可能的保持简洁,框架更灵活  
0
JFinal
JFinal
官网的jfinal demo 项目有加这个render,可以在这里下载:  http://code.google.com/p/jfinal/downloads/list 谢谢支持 
0
傲娇字符
傲娇字符

引用来自“JFinal”的答案

官网的jfinal demo 项目有加这个render,可以在这里下载:  http://code.google.com/p/jfinal/downloads/list 谢谢支持 
嗯,看到了。之前一直是看oschina上面的例子,没有这个。看来应该及时看官网最新的Demo  。谢谢大哥讲解
返回顶部
顶部