1、jfial学习笔记项目:ht为了防止tp:/和谐/yun.baidu.co请去掉m/share/汉字link?shareid=446316952&uk=6726421102014年12月9日星期二(jfinal)今天是第一天入职,学习jfinal 从表中可以看出, JFinal访问一个确切的Action(Action定义见3.2节)需要使用controllerKey与 method 来精确定位,当 method 省略时默认值为 index。urlPara 是为了能在 url 中携带参数值,urlPara 可以在一次请求中同时携带多个值,JFinal 默认使用减号“-”来分隔多个值(可通过 co
2、nstants. setUrlParaSeparator(String)设置分隔符) ,在 Controller 中可以通过 getPara(int index)分别取出这些值。controllerKey、method、urlPara这三部分必须使用正斜杠“/”分隔。 注意,controllerKey 自身也可以包含正斜杠“/” ,如“/admin/article” ,这样实质上实现了struts2的namespace功能。 记忆技巧: 第一个参数为 String 类型的将获取表单或 url 中问号挂参的域值。第一个参数为 int 或无参数的将获取 urlPara 中的参数值。2014年12月
3、10日星期三1.注意打字质量,几次打错字而出错!2.理清逻辑思路,居然出现没有配置web.xml3.对陌生的质疑使我畏葸不前,要自信!1.关于add1.首先,页面是添加 姓名:$studentnameMsg!$studentnameLMsg! 2.到web.xml jfinal com.jfinal.core.JFinalFilter configClass com.demo.config.DemonConfig jfinal /* 3.到demonconfig/* * 配置路由 */ public void configRoute(Routes me) me.add(/, StudentCo
4、ntroller.class); me.add(/student, StudentController.class); /me.add(/classes, StudentController.class); 4.到StudentController的save方法Before(StudentValidator.class) public void save() Student student = getModel(Student.class); student.save(); forwardAction(/student); 5.被StudentValidator拦截protected void
5、 validate(Controller c) / 验证表单域name,返回信息key,返回信息value validateRequiredString(student.studentname, studentnameMsg, 请输入学生名册); 这里也可以用正则验证!validateRegex(field, regExpression, errorKey, errorMessage) 6.反馈7.转回/student,无参调用index()方法Before(StudentInterceptor.class) public void index() List list = Student.da
6、o.find(select * from student); System.out.println(list); setAttr(studentList, list); render(/index.html); 8.被StudentInterceptor拦截public class StudentInterceptor implements Interceptor public void intercept(ActionInvocation ai) System.out.println(Before action invoking); ai.invoke(); System.out.print
7、ln(After action invoking); 9.执行后render(/index.html);10.到index页面 $student.studentname $student.studentage $student.studentsex $student.getClasses().classesname 删除 修改 2.关于delete1.在页面传值删除2.同添加一样,转到StudentController的delete方法public void delete() /获取表单域名为studentID的值 /Student.dao.deleteById(getPara(student
8、ID); /获取url请求中第一个值 Student.dao.deleteById(getParaToInt(); forwardAction(/student); 3.关于update1.页面传值 修改2.同添加一样,转到StudentController的get方法public void get() Student student = Student.dao.findById(getParaToInt(); setAttr(student, student); render(/index2.html); 3.转到index2,提取修改的内容 姓名: 年龄: 性别: 班级: 4.提交到Stu
9、dentController的update()方法public void update() Student student = getModel(Student.class); student.update(); forwardAction(/student); 4.设置view视图为JSPpublic void configConstant(Constants me) me.setDevMode(true); me.setViewType(ViewType.JSP); 5.访问路径,同struts的命名空间/* * 配置路由 */ public void configRoute(Routes
10、 me) me.add(/, StudentController.class); me.add(/student, StudentController.class); /me.add(/classes, ClassController.class); 注解ActionKey(“/add”)将打破原有路由,可以直接访问/add,而不是/student/addActionKey(/add) public void add() render(/add.html); 2014年12月11日星期四使用jfinal放到tomcat运行出错!1.MyEclipse中tomcat启动错误;原因是没有为tomc
11、at配置JDK2.在发布的项目里要写绝对路径,不然出现资源找不到错误1.开始使用jfinal自带服务是这样的添加2.删掉自带服务,放进tomcat后要配置路径 添加3.需要在config里配置上下文路径public void configHandler(Handlers me) me.add(new ContextPathHandler(contextPath);/设置上下文路径 3.对映射路径的理解在访问index()方法时,里面可以使用render系列方法,这时候就要考虑到路径的问题。上面这两条看的时候不注意,在项目实践中发现大有问题。加“/”表示绝对路径,就要写全以webroot为根的路
12、径,“/”就是代表webroot,如果下面有个student文件夹,则访问student的里面的index.html就要render(“/student/index.html”);而第一列则表示相对所映射路径的位置,这个映射路径是在rout路由里面配置 public void configRoute(Routes me) System.out.println(这里进入到config路由); me.add(/, StudentController.class); me.add(/student, StudentController.class); 前面一个参数表示映射到的路径,这样添加映射的结果
13、就是我可以直接访问该映射路径下的文件了,因此,我可以直接render(“index.html”);注意:千万不要加”/”4.页面列表显示5.页面中重复元素提取当页面出现重复的元素的时候,比如添加和修改有共同的部分 但要求userform.html要重新设置编码,设置为utf-8,设置长度和大小防止有人捣乱6.更新出错没有主键,应当如下设置7.分页1.后台是这样的String sql = from t_user order by id desc; int pageNum = getParaToInt(pageNum, 1);/默认值是1 setAttr(pageNum, pageNum); se
14、tAttr(objectlist,User.dao.paginate(pageNum, 2, select *, sql); render(index.html);/即这里可省略2.前台显示是这样的 $user.id $user.username $user.realname $user.mobile $user.address 删除修改 当前第$pageNum页,总共:$objectlist.totalRow条,总共:$objectlist.totalPage页关键是objectlist.list这里,是因为分页又是一个list,再次取出来,关于分页的源码来自jfinal-1.8-bin-w
15、ith-src.jar/com.jfinal.plugin.activerecord/Page.class修改后 $user.id $user.username $user.realname $user.mobile $user.address 删除 修改 当前第$userPage.pageNumber页,总共:$userPage.totalRow条,总共:$userPage.totalPage页 /* * 查询所有 */ public void index()/假如页面和方法一致,默认跳到方法名为名称的页面 setAttr(userPage, User.dao.paginate(getPar
16、aToInt(0, 1), 5); public class User extends Model private static final long serialVersionUID = 1L; public static User dao = new User(); /* * 所有 sql 写在 Model 或 Service 中,不要写在 Controller 中,养成好习惯,有利于大型项目的开发与维护 */ public Page paginate(int pageNumber, int pageSize) return paginate(pageNumber, pageSize, s
17、elect *, from t_user order by id asc); 8.拦截器1.global全局拦截器这个要配置在config里面public void configInterceptor(Interceptors me) me.add(new GlobalTestInterceptor(); 2.ControllerInterceptorBefore(ControllerTestInterceptor.class)public class InterceptorController extends Controller3.ActionInterceptorBefore(Actio
18、nTestInterceptor.class) public void index() System.out.println(这是中间执行方法); renderText(success); 4.拦截效果5.清除拦截器1)清除上一级ClearInterceptor/清除上一级拦截器(Controller级别) public void destroyControllerInterceptor() System.out.println(这是清除上一级之后的); renderText(successful); 清除效果2)清除多级ClearInterceptor(ClearLayer.ALL)/清除上
19、一级拦截器(Controller级别) public void destroyAllInterceptor() System.out.println(这是清除多级之后的); renderText(successfully); 清除效果6.拦截器栈更高级的拦截,Handlerpublic void configHandler(Handlers me) me.add(new FakeStaticHandler(); /*设置网站基本参数*/ me.add(new EnterParaHandler(); /*设置访问监控*/ /me.add(new VisitLogHandler(); 当web请求
20、发出后,Handler首先接管请求,然后才是拦截器。因此,可以在这里进行路径拦截设置。9.事物2014年12月12日星期五1.validator校验器1.在页面上的显示用户名称:$(userNameMsg)!此字段不能为空真实姓名:$(realNameMsg)!此字段不能为空此字段不能为空-这是在开始的时候显示的内容,如果不写,则不显示内容,出错了显示2.在后台拦截/* * 处理增加记录的方法 */ Before(UserValidator.class) public void doAddUser() User user = getModel(User.class);/可以加一个参数取别名 u
21、ser.set(userpass, 123456); boolean flag = user.save(); if(flag) redirect(/user/); else renderText(Sorry,save failure); 3.进入校验器拦截public class UserValidator extends Validator /* * 错误处理 */ protected void handleError(Controller c) String actionKey = getActionKey(); String view = null; c.keepModel(User.class);/ 保存上一次提交时候的表单记录 if (/user/doAddUser.equals(actionKey) / 这个ActionKey表示添加记录 操作 view = adduser.html; if (/user/updateUser.equals(actionKey) System.out.println(zhelisssssssss); view = edituser.html; c.render(view); /* * 校验方法 */ protected void vali
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1