趁着十一,使用
    
     JFinal
    
    改写项目。比起spring来,JFinal简单好用一点,对我的项目,没发现什么不适的地方,
    
     推荐使用
    
    。
   
    
     
      重点推荐一下JFinal的Enjoy模板引擎,真心好使!官网在这里:
      
       http://www.jfinal.com
      
      ,相关文档和资源可以去官网下载,也可以在
      
       JFinal和Enjoy相关文档
      
      下载,下面不对具体语法进行说明,自己去看文档,说得很明白,例子也很多。
     
    
   
Enjoy可以本地渲染,非常简单方便,先看一下例子。
程序为:
Engine engine = Engine.use();
List<String> list = new ArrayList<>();
list.add("item1");
list.add("item2");
list.add("item3");
// list={"item1", "item2", "item3"}
Map map = new LinkedHashMap();
map.put("key1", "value1");
map.put("key2", "value2");
map.put("key3", "value3");
// map={"key1": "value1", "key2": "value2", "key3": "value3"}
Map data = new HashMap();
data.put("map", map);
data.put("list", list);
String txt = engine.getTemplate("D:/template.txt").renderToString(data);
System.out.println(txt);
    模板
    
     template.txt
    
    为:
   
#for(x : list)
    #(for.index) : #(x)
#end
#for(x : map)
    #(x.key) : #(x.value)
#end渲染结果为:
0 : item1
1 : item2
2 : item3
key1 : value1
key2 : value2
key3 : value3可以看出,Enjoy的语法确实很容易学会,基本看一遍就会用。
    有一个好用的指令,
    
     define
    
    指令。主要用于定义模板函数,简单说就是定义函数,将网页排版变为函数调用。举个例子说明一下:
   
#for(x : [1..10])
    #(x)
#end这个的渲染结果是:
1
2
3
4
5
6
7
8
9
10
可以将这个模板定义为一个函数,是这样的:
#define print_num()
    ### 下面一行的代码等效于 for(x=1;x<=10;x++)
    #for(x : [1..10])
        #(x)
    #end
#end调用方式非常简单,语法如下:
#@print_num?()这样,在函数里面可以做很多事情,比如打印网页的头文件等,只需要一行代码就可以。当然,这和include有点相似。既然是函数,那就可以传入参数,升级如下:
#define print_num(n)
    ### 下面一行的代码等效于 for(x=1;x<=n;x++)
    #for(x : [1..n])
        #(x)
    #end
#end比如,调用
#@print_num?(3)渲染为:
1
2
3这样就有点意思了。
    于是,我想到之前一个头疼的问题,需要在每个页面中引入不同的
    
     css
    
    文件和
    
     js
    
    文件,比如,有个页面需要引入
    
     bootstrap-table
    
    的相关文件:
   
<link href="vendor/bootstrap-table/bootstrap-table.min.css" rel="stylesheet" type="text/css">
<script src="vendor/bootstrap-table/bootstrap-table.min.js"></script>
    不同页面引入的
    
     css
    
    和
    
     js
    
    文件不同,一旦这些文件的路径改了,页面中对应的路径都需要改,这样就很不好,使用
    
     define
    
    可以这样实现:
   
#define import_bootstrap_select()
  <link href="#(ctx)/vendor/bootstrap-table/bootstrap-table.min.css" rel="stylesheet" type="text/css">
  <script src="#(ctx)/vendor/bootstrap-table/bootstrap-table.min.js"></script>
#end
    只需要在需要用的页面中写上
    
     #@import_bootstrap_select?()
    
    即可。但是这样,需要为不同的文件,写不同的模板函数。于是可以这样写:
   
#define css(name)
  #if("bootstrap-table".equals(name))
    <link href="#(ctx)/vendor/bootstrap-table/bootstrap-table.min.css" rel="stylesheet" type="text/css">
  #elseif("其他name".equals(name))
    ### 其他css文件
  #end
#end
#define js(name)
  #if("bootstrap-table".equals(name))
    <script src="#(ctx)/vendor/bootstrap-table/bootstrap-table.min.js"></script>
  #elseif("其他name".equals(name))
    ### 其他js文件
  #end
#end使用方式变为:
  #@css?("bootstrap-table")
  #@js?("bootstrap-table")似乎也没有简单,算是灵活了吧><
 
