栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

JFinal极速开发框架使用笔记分享

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JFinal极速开发框架使用笔记分享

记录第一次使用JFinal,从简单的框架搭建到增删改查,从自带的方法到正常框架习惯的使用方式。

JFinal官网:http://www.jfinal.com/

JFinal 是基于 Java 语言的极速 WEB + ORM 框架,其核心设计目标是开发迅速、代码量少、学习简单、功能强大、轻量级、易扩展、Restful。在拥有Java语言所有优势的同时再拥有ruby、python、php等动态语言的开发效率。

JFinal有如下主要特点:

MVC架构,设计精巧,使用简单

遵循COC原则,零配置,无xml

独创Db + Record模式,灵活便利

ActiveRecord支持,使数据库开发极致快速

自动加载修改后的java文件,开发过程中无需重启web server

AOP支持,拦截器配置灵活,功能强大

Plugin体系结构,扩展性强

多视图支持,支持FreeMarker、JSP、Velocity

强大的Validator后端校验功能

功能齐全,拥有struts2的绝大部分功能

体积小仅632K,且无第三方依赖

例子:

本人用的maven,首先创建一个maven项目:

我的项目创建之后首先要设置:

然后点Apply

还有其他一些设置等等,我的问题,这里先跳过

然后在pom.xml中引入jar包:

maven搜索jar包:http://mvnrepository.com/

官方demo的pom.xml:

这里没有引入json,我的这个demo最后的方法需要json


 4.0.0
 com.demo
 jfinal_demo_for_maven
 war
 3.2
 jfinal_demo_for_maven Maven Webapp
 http://maven.apache.org
 
 
 UTF-8
 UTF-8
 
 
  
 
  
   ali-maven
   http://maven.aliyun.com/nexus/content/groups/public
   
    true
   
   
    true
    always
    fail
   
  
 
 
 
 
 
 
 
  junit
  junit
  3.8.1
  test
 
 
  com.jfinal
  jetty-server
  8.1.8
  
  compile
 
 
  com.jfinal
  jfinal
  3.3
 
 
  log4j
  log4j
  1.2.16
 
 
  mysql
  mysql-connector-java
  5.1.44
 
 
  com.alibaba
  druid
  1.0.29
 
 
  com.jfinal
  cos
  2017.5
 
 
 
 
 
 jfinal_demo_for_maven
  
   
   org.mortbay.jetty
   jetty-maven-plugin
   8.1.8.v20121106
   
    stop
    5599
    
     /
    
    5
    
     
      80
      60000
     
    
   
   
  
 

然后是web.xml的配置:

注意:

DemoConfig.java 文件所在的包以及自身文件名必须与 web.xml 中的 param-value 标签内的配置相一致(在本例中该配置为 demo.DemoConfig)。


jfinal
com.jfinal.core.JFinalFilter

configClass
demo.DemoConfig



jfinal

 
 static StudentService service = new StudentService();
 
 @Before(StudentInterceptor.class)
 public void index() {
  List list = Student.dao.find("select * from student");
  setAttr("studentList", list);
  //注意下面路径的的前面如果带/则从根目录下开始找,也就是说 下代码 = render("/student/index.html");
  render("index.html");
 }
 
 public void add() {
  render("add.html");
 }
 
 public void test() {
  List list = Student.dao.find("select * from student");
  setAttr("studentList", list);
  setAttr("student", list.get(0));
  render("test.jsp");
 }
 
 public void getlist() {
  List list = Student.dao.find("select * from student");
  JSonObject jo = new JSonObject();
  jo.put("code", 0);
  jo.put("msg", true);
  jo.put("count",list.size());
  jo.put("data", list);
  renderJson(jo);
 }
 
 public void layui() {
  List list = Student.dao.find("select * from student");
  setAttr("studentList", list);
  render("index3.html");
 }
 public void delete() {
  // 获取表单域名为studentid的值
  Student.dao.deleteById(getPara("studentid"));
  forwardAction("/student");
 }
 
 public void delete1() {
  // 获取url请求中第一个值
  Student.dao.deleteById(getParaToInt());
  forwardAction("/student");
 }
 
 public void update() {
  Student student = getModel(Student.class);
  student.update();
  forwardAction("/student");
 }
 public void get() {
  Student student = Student.dao.findById(getPara("studentid"));
  setAttr("student", student);
  render("index2.html");
 }
 
 public void get1() {
  Student student = Student.dao.findById(getParaToInt());
  setAttr("student", student);
  render("index2.html");
 }
 @Before(StudentValidator.class)
 public void save() {
  
  //getBean(Student.class).save();
  getModel(Student.class).save();
  redirect("/student");
 }
 
 @Before(StudentValidator2.class)
 public void savebean() {
  getBean(Student.class).save();
  redirect("/student");
 }
}

同样的简单的说明也写在注释里了。

方法基本上都在这里了,下面是其他的一些配置:

这是实体类:

package demo.model;
import com.jfinal.plugin.activerecord.Model;
public class Student extends Model {
 public static final Student dao = new Student();

 
}

StudentValidator:

package StudentValidator;
import com.jfinal.core.Controller;
import com.jfinal.validate.Validator;
public class StudentValidator extends Validator {
 //在校验失败时才会调用
 @Override
 protected void handleError(Controller controller) {
  controller.keepPara("student.studentname");//将提交的值再传回页面以便保持原先输入的值
  controller.render("/add.html");
 }
 @Override
 protected void validate(Controller controller) {
  //验证表单域name,返回信息key,返回信息value
  validateRequiredString("student.studentname", "studentnameMsg",
    "请输入学生名称!");
 }
}
package StudentValidator;
import com.jfinal.core.Controller;
import com.jfinal.validate.Validator;
public class StudentValidator2 extends Validator {
 //在校验失败时才会调用
 @Override
 protected void handleError(Controller controller) {
  controller.keepPara("studentname");//将提交的值再传回页面以便保持原先输入的值
  controller.render("/add.html");
 }
 @Override
 protected void validate(Controller controller) {
  //验证表单域name,返回信息key,返回信息value
  validateRequiredString("studentname", "studentnameMsg",
    "请输入学生名称!");
 }
}

StudentInterceptor:

package StudentInterceptor;
import com.jfinal.aop.Interceptor;
import com.jfinal.aop.Invocation;
public class StudentInterceptor implements Interceptor {
 public void intercept(Invocation ai) {
  System.out.println("Before action invoking");
  ai.invoke();
  System.out.println("After action invoking");
 }
}

然后是前台的显示页面:

关于前台页面,需要看一下文档第六章,JFinal模板引擎的内容,了解JFinal如何在前台显示,这是很重要的





学生管理



 学生管理
 测试layui
 编辑索引0
添加
删除 #for(x : [1..10]) #(x) #end #for(x : studentList) #end
id 姓名 性别 年龄 地址 邮箱 操作
#(x.studentid) #(x.studentname) #(x.sex) #(x.age) #(x.address) #(x.email)   删除   删除   修改   修改1

这就是页面效果,因为没有样式所以看起来比较粗狂,然后下面是用正常使用的layui,加上正常习惯的方法返回数据组成的:





学生管理layui




 
  
id 姓名 性别 年龄 地址

这样感觉稍微好了一点,因为只是第一次使用,做一个测试,所以还是比较粗犷的。

然后需要注意的是这种方式的数据返回的问题:

public void getlist() {
  List list = Student.dao.find("select * from student");
  JSonObject jo = new JSonObject();
  jo.put("code", 0);
  jo.put("msg", true);
  jo.put("count",list.size());
  jo.put("data", list);
  renderJson(jo);
 }

这是layui表格url指向的方法,在这里,需要将json数据用renderJson的方式返回。

然后需要 注意的是,我尝试过直接返回list集合,貌似方法是可行的,只是因为layui表格必须是以上格式才能接收数据所以没有显示到页面上,但是当我直接return jo的时候后台报错,这个问题只能等明天在学习并解决了。

以下是返回的render方法的几种使用方式:

然后需要注意的是方法的调用和传参:

如下两种方法和传参的方式:

  删除
       删除
       修改
       修改1

下面是controller方法:

public void delete() {
  // 获取表单域名为studentid的值
  Student.dao.deleteById(getPara("studentid"));
  forwardAction("/student");
 }
 
 public void delete1() {
  // 获取url请求中第一个值
  Student.dao.deleteById(getParaToInt());
  forwardAction("/student");
 }
 
 public void update() {
  Student student = getModel(Student.class);
  student.update();
  forwardAction("/student");
 }
 public void get() {
  Student student = Student.dao.findById(getPara("studentid"));
  setAttr("student", student);
  render("index2.html");
 }
 
 public void get1() {
  Student student = Student.dao.findById(getParaToInt());
  setAttr("student", student);
  render("index2.html");
 }

最后就是添加接受实体类的两种方式:

@Before(StudentValidator.class)
 public void save() {
  
  //getBean(Student.class).save();
  getModel(Student.class).save();
  redirect("/student");
 }
 
 @Before(StudentValidator2.class)
 public void savebean() {
  getBean(Student.class).save();
  redirect("/student");
 }

其中第二中的getBean方式在我这个demo中,可能由于没有设置getset的原因,添加之后是只有生成了ID,没有其他数据的。

如果需要使用。下面是官方demo的写法:

package com.demo.common.model;
import com.demo.common.model.base.baseBlog;

@SuppressWarnings("serial")
public class Blog extends baseBlog {
 
}
package com.demo.common.model.base;
import com.jfinal.plugin.activerecord.Model;
import com.jfinal.plugin.activerecord.IBean;

@SuppressWarnings({"serial", "unchecked"})
public abstract class baseBlog> extends Model implements IBean {
 public M setId(java.lang.Integer id) {
  set("id", id);
  return (M)this;
 }
 
 public java.lang.Integer getId() {
  return getInt("id");
 }
 public M setTitle(java.lang.String title) {
  set("title", title);
  return (M)this;
 }
 
 public java.lang.String getTitle() {
  return getStr("title");
 }
 public M setContent(java.lang.String content) {
  set("content", content);
  return (M)this;
 }
 
 public java.lang.String getContent() {
  return getStr("content");
 }
}

以上这篇JFinal极速开发框架使用笔记分享就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持考高分网。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/142316.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号