使用jfinal 实现 登陆 注册 验证码检验

最近项目一直使用jfinal开发 于是 就将基本的CMS功能进行一个模块一个模块的整理 待日后使用的时候 可以实现快速搭建的目的

@沐木 目前实现的主要功能就是要实现网站的基本CMS 一般包括 用户管理 文章 增删改查 数据上传 以及数据校验 和常用的类似论坛的功能

@版本 目前开发第一个版本 整理下jfinal中的 用户注册 登陆 以及 验证码校验


话说Beetl模板框架比Freemarker模板还要快,至于到底怎么样,目前还没有感觉到,不管那么多了,上手再说。

首先需要下载beetl包:Beetl模板路径

Beetl提供JFinal框架的集成,使用BeetRenderFactory类,通过如下代码注册即可完成集成:

[html]  view plain copy
  1. @Override  
  2.     public void configConstant(Constants me) {  
  3.         loadPropertyFile("jdbc.properties");  
  4.         //配置模板  
  5.         me.setMainRenderFactory(new MyBeetlRenderFactory());  
  6.         //获取GroupTemplate模板,可以设置共享变量操作  
  7.         GroupTemplate groupTemplate=MyBeetlRenderFactory.groupTemplate;  
  8.         me.setDevMode(getPropertyToBoolean("config.devModel", false));  
  9.         me.setViewType(ViewType.JSP);  
  10.         me.setEncoding("UTF-8");  
  11.     }  

该方法的作用为JFinal框架中常量配置方法,这里我自定义的MyBeetlRenderFactory类继承于BeetlRenderFactory,如下:

[html]  view plain copy
  1. package com.tenghu.core.beetl;  
  2. import org.beetl.ext.jfinal.BeetlRender;  
  3. import org.beetl.ext.jfinal.BeetlRenderFactory;  
  4. import com.jfinal.render.Render;  
  5. public class MyBeetlRenderFactory extends BeetlRenderFactory{  
  6.     @Override  
  7.     public Render getRender(String view) {  
  8.         BeetlRender render=new BeetlRender(groupTemplate, view);  
  9.         return render;  
  10.     }  
  11.     @Override  
  12.     public String getViewExtension() {  
  13.         return ".html";  
  14.     }  
  15. }  

由于BeetRenderFactory默认使用的FileResourceLoader,其根目录位于WebRoot下,如果需要修改其他目录下,需要在src下创建一个beetl,properties的属性文件,在该文件中配置如下代码:

[html]  view plain copy
  1. RESOURCE.root=/WEB-INF/view  

因为Beetl默认的配置文件在org/beetl/core/beetl-default.properties,Beetl启动时会通过Configuration类加载,然后再加载classpath中的beetl.properties,如果自己创建的beetl.properties文件,那么回后者会将前者覆盖

到这里呢,Jfinal集成Beetl模板就算完成了,接下来看下实现的效果,如下:

[html]  view plain copy
  1. public void index(){  
  2.         List<Users> testList=Users.dao.find("select * from users");  
  3.         setAttr("testList", testList);  
  4.         render("login.html");  
  5.     }  

这里我输出的是login.html页面,该页面在WEB-INF/view中,看着是不是很方便,如果不自己配置beetl.properties文件,那么render这个地方就需要写WEB-INF/view/login.html,一个项目中肯定有很多页面,如果不配置beetl.properties文件,每个输出到界面的页面都要使用完整的路径,就会觉得是一件特麻烦的事,配置beetl.peoperties文件就减少了重复的工作

上面也看到了,这里我输出的是一个集合,那么使用Beetl模板怎么对集合进行遍历呢,很简单,如下:

[html]  view plain copy
  1. <%for(test in testList){%>  
  2.         <tr>  
  3.             <td>${testLP.index}td>  
  4.             <td>${test.id}td>  
  5.             <td>${test.username!''}td>  
  6.         tr>  
  7.     <%}%>  

看到这样的输出,是不是有种熟悉的感觉,对了,与jsp的小脚本差不多的标签,但是还是不要搞混了

大家可能也看到了testLp这个变量,该变量是beetl隐含定义的变量,能在循环体内使用,其命名规范是item加上LP能提供当前循环的信息,如:

testLP.index;当前的索引,从1开始

testLP.size;集合的长度

testLP.first;是否是第一个

testLP.last;是否是最后一个

testLP.even;是否是偶数个

testLP.odd;是否是奇数个

在Beetl模板中对循环操作不止上面一个,上面的for循环的形式是for-in,接下来还有:

for(exp;exp;exp)

while

elsefor

使用如下:

for(exp;exp;exp)

[html]  view plain copy
  1. <%for(var i=0;i<testList.~size;i++){%>  
  2.         <tr>  
  3.             <td>${testList.~size}td>  
  4.             <td>${testList[i].id}td>  
  5.             <td>${testList[i].username!''}td>  
  6.         tr>  
  7.     <%}%>  

while

[html]  view plain copy
  1. <%var i=0;while(i<testList.~size){%>  
  2.         <tr>  
  3.             <td>${testList.~size}td>  
  4.             <td>${testList[i].id}td>  
  5.             <td>${testList[i].username!''}td>  
  6.         tr>  
  7.     <%i++;}%>  

对于for循环来说,是没有进入循环体中时,则进入elsefor语句块,所以elsefor不能狗单独使用

[html]  view plain copy
  1. <%for(var i=0;i<testList.~size;i++){%>  
  2.         <tr>  
  3.             <td>${testList.~size}td>  
  4.             <td>${testList[i].id}td>  
  5.             <td>${testList[i].username!''}td>  
  6.         tr>  
  7.     <%}elsefor{%>  
  8.         <tr>  
  9.             <td colspan="3">没有记录td>  
  10.         tr>  
  11.     <%}%>  

接下来聊聊条件语句,Beetl中的条件语句有:

if-else

switch-case

select-case

具体使用如下:

[html]  view plain copy
  1. <%  
  2.     var a=true,b=1;  
  3.     if(a&&b==1){  
  4.           
  5.     }else if(a){  
  6.       
  7.     }else{  
  8.           
  9.     }  
  10. %>  

switch-case:

[html]  view plain copy
  1. <%  
  2.     var b=1;  
  3.     switch(b){  
  4.         case 0:  
  5.             print('1');  
  6.         break;  
  7.         case 1:  
  8.             print('2');  
  9.         break;  
  10.         case 2:  
  11.             print('2');  
  12.         break;  
  13.           
  14.         default:  
  15.             print('error');  
  16.         break;  
  17.     }  
  18. %>  
switch可以支持任何类型

select-case  是switch  case的增强版。他允许case  里有逻辑表达式,同时,也不需要每个case都break一下,默认遇

到合乎条件的case执行后就退出。

[html]  view plain copy
  1. <%  
  2.     var b=1;  
  3.     select(b){  
  4.         case 0,1:  
  5.             print("it's small int");  
  6.         case 2,3:  
  7.             print("it's big int");  
  8.         default:  
  9.             print("error");  
  10.     }  
  11. %>  
如果在使用模板的过程中出现异常,可以使用try-catch处理,如下:

[html]  view plain copy
  1. <%  
  2.     try{  
  3.         var a=10;  
  4.         var b=0;  
  5.         print(a/b);  
  6.     }catch(error){  
  7.         print("出现异常:"+error.message);  
  8.     }  
  9. %>  
error代表了一个异常,你可以通过error.message 来获取可能的错误信息
也可以省略catch部分,这样出现异常,不做任何操作

Beetl模板判断变量是否存在可以使用has与isEmpty

简单的Beetl模板操作就到这里了,需要了解其他的使用,在下载的包中有官网文档



你可能感兴趣的:(使用jfinal 实现 登陆 注册 验证码检验)