开发者社区> 问答> 正文

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

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

}

展开
收起
爱吃鱼的程序员 2020-06-22 22:34:32 467 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

      在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"


    引用来自“JFinal”的答案

      在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"


    官网的jfinaldemo项目有加这个render,可以在这里下载:  http://code.google.com/p/jfinal/downloads/list 谢谢支持 

    引用来自“JFinal”的答案

    官网的jfinaldemo项目有加这个render,可以在这里下载:  http://code.google.com/p/jfinal/downloads/list 谢谢支持 
    2020-06-22 22:34:51
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Java Spring Boot开发实战系列课程【第7讲】:Spring Boot 2.0安全机制与MVC身份验证实战(Java面试题) 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载