jfial学习笔记.docx

上传人:b****7 文档编号:9826303 上传时间:2023-02-06 格式:DOCX 页数:21 大小:851.46KB
下载 相关 举报
jfial学习笔记.docx_第1页
第1页 / 共21页
jfial学习笔记.docx_第2页
第2页 / 共21页
jfial学习笔记.docx_第3页
第3页 / 共21页
jfial学习笔记.docx_第4页
第4页 / 共21页
jfial学习笔记.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

jfial学习笔记.docx

《jfial学习笔记.docx》由会员分享,可在线阅读,更多相关《jfial学习笔记.docx(21页珍藏版)》请在冰豆网上搜索。

jfial学习笔记.docx

jfial学习笔记

项目:

ht为了防止tp:

/和谐/yun.baidu.co请去掉m/share/汉字link?

shareid=446316952&uk=672642110

2014年12月9日星期二(jfinal)

今天是第一天入职,学习jfinal

从表中可以看出,JFinal访问一个确切的Action(Action定义见3.2节)需要使用controllerKey与method来精确定位,当method省略时默认值为index。

urlPara是为了能在url中携带参数值,urlPara可以在一次请求中同时携带多个值,JFinal默认使用减号“-”来分隔多个值(可通过constants.setUrlParaSeparator(String)设置分隔符),在Controller中可以通过getPara(intindex)分别取出这些值。

controllerKey、method、urlPara这三部分必须使用正斜杠“/”分隔。

注意,controllerKey自身也可以包含正斜杠“/”,如“/admin/article”,这样实质上实现了struts2的namespace功能。

记忆技巧:

第一个参数为String类型的将获取表单或url中问号挂参的域值。

第一个参数为int或无参数的将获取urlPara中的参数值。

2014年12月10日星期三

1.注意打字质量,几次打错字而出错!

2.理清逻辑思路,居然出现没有配置web.xml

3.对陌生的质疑使我畏葸不前,要自信!

1.关于add

1.首先,页面是添加

姓名:

${studentnameMsg!

}${studentnameLMsg!

}

2.到web.xml

jfinal

com.jfinal.core.JFinalFilter

configClass

com.demo.config.DemonConfig

jfinal

/*

3.到demonconfig

/**

*配置路由

*/

publicvoidconfigRoute(Routesme){

me.add("/",StudentController.class);

me.add("/student",StudentController.class);

//me.add("/classes",StudentController.class);

}

4.到StudentController的save方法

@Before(StudentValidator.class)

publicvoidsave(){

Studentstudent=getModel(Student.class);

student.save();

forwardAction("/student");

}

5.被StudentValidator拦截

protectedvoidvalidate(Controllerc){

//验证表单域name,返回信息key,返回信息value

validateRequiredString("student.studentname","studentnameMsg","请输入学生名册");

这里也可以用正则验证!

validateRegex(field,regExpression,errorKey,errorMessage)

}

6.反馈

7.转回/student,无参调用index()方法

@Before(StudentInterceptor.class)

publicvoidindex(){

Listlist=Student.dao.find("select*fromstudent");

System.out.println(list);

setAttr("studentList",list);

render("/index.html");

}

8.被StudentInterceptor拦截

publicclassStudentInterceptorimplementsInterceptor{

publicvoidintercept(ActionInvocationai){

System.out.println("Beforeactioninvoking");

ai.invoke();

System.out.println("Afteractioninvoking");

}

}

9.执行后

render("/index.html");

10.到index页面

<#liststudentListasstudent>

${student.studentname}

${student.studentage}

${student.studentsex}

${student.getClasses().classesname}

删除

修改

2.关于delete

1.在页面传值

删除

2.同添加一样,转到StudentController的delete方法

publicvoiddelete(){

//获取表单域名为studentID的值

//Student.dao.deleteById(getPara("studentID"));

//获取url请求中第一个值

Student.dao.deleteById(getParaToInt());

forwardAction("/student");

}

3.关于update

1.页面传值

修改

2.同添加一样,转到StudentController的get方法

publicvoidget(){

Studentstudent=Student.dao.findById(getParaToInt());

setAttr("student",student);

render("/index2.html");

}

3.转到index2,提取修改的内容

姓名:


年龄:


性别:


班级:


4.提交到StudentController的update()方法

publicvoidupdate(){

Studentstudent=getModel(Student.class);

student.update();

forwardAction("/student");

}

4.设置view视图为JSP

publicvoidconfigConstant(Constantsme){

me.setDevMode(true);

me.setViewType(ViewType.JSP);

}

5.访问路径,同struts的命名空间

/**

*配置路由

*/

publicvoidconfigRoute(Routesme){

me.add("/",StudentController.class);

me.add("/student",StudentController.class);

//me.add("/classes",ClassController.class);

}

注解ActionKey(“/add”)将打破原有路由,可以直接访问/add,而不是/student/add

@ActionKey("/add")

publicvoidadd(){

render("/add.html");

}

2014年12月11日星期四

使用jfinal放到tomcat运行出错!

1.MyEclipse中tomcat启动错误;原因是没有为tomcat配置JDK

2.在发布的项目里要写绝对路径,不然出现资源找不到错误

1.开始使用jfinal自带服务是这样的

添加

2.删掉自带服务,放进tomcat后要配置路径

添加

3.需要在config里配置上下文路径

publicvoidconfigHandler(Handlersme){

me.add(newContextPathHandler("contextPath"));//设置上下文路径

}

3.对映射路径的理解

在访问index()方法时,里面可以使用render系列方法,这时候就要考虑到路径的问题。

上面这两条看的时候不注意,在项目实践中发现大有问题。

加“/”表示绝对路径,就要写全以webroot为根的路径,“/”就是代表webroot,如果下面有个student文件夹,则访问student的里面的index.html就要render(“/student/index.html”);而第一列则表示相对所映射路径的位置,这个映射路径是在rout路由里面配置

publicvoidconfigRoute(Routesme){

System.out.println("这里进入到config路由");

me.add("/",StudentController.class);

me.add("/student",StudentController.class);

}

前面一个参数表示映射到的路径,这样添加映射的结果就是我可以直接访问该映射路径下的文件了,因此,我可以直接render(“index.html”);注意:

千万不要加”/”

4.页面列表显示

5.页面中重复元素提取

当页面出现重复的元素的时候,比如添加和修改有共同的部分

<#include"userform.html">

但要求userform.html要重新设置编码,设置为utf-8,设置长度和大小防止有人捣乱

6.更新出错

没有主键,应当如下设置

''}"name="user.id">

7.分页

1.后台是这样的

Stringsql="fromt_userorderbyiddesc";

intpageNum=getParaToInt("pageNum",1);//默认值是1

setAttr("pageNum",pageNum);

setAttr("objectlist",User.dao.paginate(pageNum,2,"select*",sql));

render("index.html");//即这里可省略

2.前台显示是这样的

<#listobjectlist.listasuser>

${user.id}

${user.username}

${user.realname}

${user.mobile}

${user.address}

删除

修改

当前第${pageNum}页,总共:

${objectlist.totalRow}条,总共:

${objectlist.totalPage}页

关键是objectlist.list这里,是因为分页又是一个list,再次取出来,

关于分页的源码来自jfinal-1.8-bin-with-src.jar/com.jfinal.plugin.activerecord/Page.class

修改后

<#listuserPage.getList()asuser>

${user.id}

${user.username}

${user.realname}

${user.mobile}

${user.address}

删除

修改

当前第${userPage.pageNumber}页,总共:

${userPage.totalRow}条,总共:

${userPage.totalPage}页

<#include"/common/_paginate.html"/>

<@paginatecurrentPage=userPage.pageNumbertotalPage=userPage.totalPageactionUrl="${contextPath}/user/"/>

/**

*查询所有

*/

publicvoidindex(){//假如页面和方法一致,默认跳到方法名为名称的页面

setAttr("userPage",User.dao.paginate(getParaToInt(0,1),5));

}

publicclassUserextendsModel{

privatestaticfinallongserialVersionUID=1L;

publicstaticUserdao=newUser();

/**

*所有sql写在Model或Service中,不要写在Controller中,养成好习惯,有利于大型项目的开发与维护

*/

publicPagepaginate(intpageNumber,intpageSize){

returnpaginate(pageNumber,pageSize,"select*","fromt_userorderbyidasc");

}

}

8.拦截器

1.global全局拦截器

这个要配置在config里面

publicvoidconfigInterceptor(Interceptorsme){

me.add(newGlobalTestInterceptor());

}

2.ControllerInterceptor

@Before(ControllerTestInterceptor.class)

publicclassInterceptorControllerextendsController{

3.ActionInterceptor

@Before(ActionTestInterceptor.class)

publicvoidindex(){

System.out.println("这是中间执行方法");

renderText("success");

}

4.拦截效果

5.清除拦截器

1)清除上一级

@ClearInterceptor//清除上一级拦截器(Controller级别)

publicvoiddestroyControllerInterceptor(){

System.out.println("这是清除上一级之后的");

renderText("successful");

}

清除效果

2)清除多级

@ClearInterceptor(ClearLayer.ALL)//清除上一级拦截器(Controller级别)

publicvoiddestroyAllInterceptor(){

System.out.println("这是清除多级之后的");

renderText("successfully");

}

清除效果

6.拦截器栈

更高级的拦截,Handler

publicvoidconfigHandler(Handlersme){

me.add(newFakeStaticHandler());

/**设置网站基本参数**/

me.add(newEnterParaHandler());

/**设置访问监控**/

//me.add(newVisitLogHandler());

}

当web请求发出后,Handler首先接管请求,然后才是拦截器。

因此,可以在这里进行路径拦截设置。

9.事物

2014年12月12日星期五

1.validator校验器

1.在页面上的显示

用户名称:

''}"maxlength="20"size="50"/>${(userNameMsg)!

'此字段不能为空'}

真实姓名:

''}"maxlength="20"size="50"/>${(realNameMsg)!

'此字段不能为空'}

此字段不能为空---这是在开始的时候显示的内容,如果不写,则不显示内容,出错了显示

2.在后台拦截

/**

*处理增加记录的方法

*/

@Before(UserValidator.class)

publicvoiddoAddUser(){

Useruser=getModel(User.class);//可以加一个参数取别名

user.set("userpass","123456");

booleanflag=user.save();

if(flag){

redirect("/user/");

}else{

renderText("Sorry,savefailure");

}

}

3.进入校验器拦截

publicclassUserValidatorextendsValidator{

/**

*错误处理

*/

protectedvoidhandleError(Controllerc){

StringactionKey=getActionKey();

Stringview=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);

}

/**

*校验方法

*/

protectedvoidvali

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1