EnjoyController.java
package com.zhiguo.controller;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.jfinal.core.Controller;
import com.zhiguo.model.Enjoy;
public class EnjoyController extends Controller {
public void index() {
setAttr("title", "enjoy 模板");
setAttr("enjoy", enjoy());
setAttr("enjoys", enjoys());
setAttr("enjoyMap", enjoyMap());
renderTemplate("index.html");
}
public Enjoy enjoy() {
Enjoy enjoy = new Enjoy();
enjoy.setName("张三");
enjoy.setAge(18);
return enjoy;
}
public List<Enjoy> enjoys() {
List<Enjoy> enjoys = new ArrayList<>();
enjoys.add(enjoy());
enjoys.add(enjoy());
enjoys.add(enjoy());
return enjoys;
}
public Map<String, Enjoy> enjoyMap() {
Map<String, Enjoy> enjoyMap = new HashMap<>();
enjoyMap.put("enjoy1", enjoy());
enjoyMap.put("enjoy2", enjoy());
return enjoyMap;
}
}
FilterConfig.java
package com.zhiguo.filter.config;
import com.jfinal.config.Constants;
import com.jfinal.config.Handlers;
import com.jfinal.config.Interceptors;
import com.jfinal.config.JFinalConfig;
import com.jfinal.config.Plugins;
import com.jfinal.config.Routes;
import com.jfinal.core.JFinal;
import com.jfinal.ext.handler.ContextPathHandler;
import com.jfinal.kit.PathKit;
import com.jfinal.kit.PropKit;
import com.jfinal.plugin.activerecord.ActiveRecordPlugin;
import com.jfinal.plugin.activerecord.CaseInsensitiveContainerFactory;
import com.jfinal.plugin.druid.DruidPlugin;
import com.jfinal.template.Engine;
import com.zhiguo.controller.EnjoyController;
import com.zhiguo.controller.IndexController;
import com.zhiguo.controller.UserController;
import com.zhiguo.model.User;
import com.zhiguo.util.ConfigUtil;
//configConstant>>configRoute>>configPlugin>>configEngine>>configInterceptor>>configHandler>>afterJFinalStart
public class FilterConfig extends JFinalConfig {
static {
PropKit.use("config.txt");
}
// 配置常量
@Override
public void configConstant(Constants me) {
me.setDevMode(PropKit.getBoolean("devMode"));// 开发者模式
// me.setBaseUploadPath("");// 文件上传路径,对应getFile系列方法
// me.setBaseDownloadPath("");//文件下载根目录,对应renderFile系列方法
}
// 配置路由
@Override
public void configRoute(Routes me) {
me.add("/", IndexController.class);// 请求映射关系,"/"是webapp所在目录
me.add("/user", UserController.class);
me.add("/enjoy", EnjoyController.class, "/WEB-INF/enjoy");
}
// 配置插件,例如数据库配置
@Override
public void configPlugin(Plugins me) {
DruidPlugin druidPlugin = new DruidPlugin(ConfigUtil.url, ConfigUtil.username, ConfigUtil.password);
me.add(druidPlugin);
ActiveRecordPlugin activeRecordPlugin = new ActiveRecordPlugin(druidPlugin);
activeRecordPlugin.setBaseSqlTemplatePath(PathKit.getWebRootPath() + "/WEB-INF/sql/");
activeRecordPlugin.addSqlTemplate("t_user.sql");
// 数据库字段转换:true转成小写, false转成大写, 空参数区分大小写
activeRecordPlugin.setContainerFactory(new CaseInsensitiveContainerFactory(true));
activeRecordPlugin.addMapping("t_user", User.class);
me.add(activeRecordPlugin);
}
// 配置引擎
@Override
public void configEngine(Engine me) {
// devMode 配置为 true,将支持模板实时热加载
me.setDevMode(PropKit.getBoolean("devMode"));
// 添加共享函数,等效于在每个页面中添加#include("layout.html")
me.addSharedFunction("/WEB-INF/enjoy/_layout.html");
// 分享静态方法
// me.addSharedStaticMethod(Share.class);
// 分享所有方法
// me.addSharedMethod(Share.class);
// me.addSharedMethod(new Share());
// 分享所有变量和方法
me.addSharedObject("share", new Share());
}
// 配置拦截,全局拦截器
@Override
public void configInterceptor(Interceptors me) {
}
// 配置处理
@Override
public void configHandler(Handlers me) {
me.add(new ContextPathHandler("ctx"));
}
@Override
public void afterJFinalStart() {
System.out.println("==>> afterJFinalStart");
}
@Override
public void beforeJFinalStop() {
System.out.println("==>> beforeJFinalStop");
}
// 启动后访问地址: http://localhost/maven-jfinal/index.html
public static void main(String[] args) {
JFinal.start("src/main/webapp", 80, "/maven-jfinal", 5);
}
}
Share.java
package com.zhiguo.filter.config;
public class Share {
public String shareField = "shareField";
public static String shareStaticField = "shareStaticField";
public String shareMethod() {
return "shareMethod()";
}
public static String shareStaticMethod() {
return "shareStaticMethod()";
}
}
Enjoy.java
package com.zhiguo.model;
public class Enjoy {
private String name;
private int age;
private String email;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@Override
public String toString() {
return "Enjoy [name=" + name + ", age=" + age + ", email=" + email + "]";
}
}
_layout.html
#define if()
#if(null != enjoy.name)
#(enjoy.name)
#end
#end
#define elseif()
#if(null != enjoy.getEmail())
#(enjoy.email)
#else if(null == enjoy.getEmail())
email null
#end
#end
#define for()
#for(i = 0; i < 10; i++)
#(i)
#end
#end
#define forList()
#for(enjoy : enjoys)
#(enjoy.name),#(enjoy.age);
#end
#end
#define forMap()
#for(kv : enjoyMap)
#(kv.key),#(kv.value.name):#(kv.value.age);
#end
#end
index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Enjoy Engine</title>
</head>
<body>
<div>
#(share.shareField ?? );<br>
#(share.shareStaticField ?? );<br>
#(share.shareMethod() ?? );<br>
#(share.shareStaticMethod() ?? );<br>
<table border="8">
<tbody>
<tr bgcolor="#66ffff">
<td>变量或表达式</td> <td>输出结果</td> <td>其他说明</td>
</tr>
<tr>
<td>title</td> <td>#(title)</td> <td>null值不输出, 也不报错</td>
</tr>
<tr>
#set(title='enjoy template')
<td>title</td> <td>#(title)</td> <td>set(title='enjoy template')</td>
</tr>
<tr>
<td>enjoy.name</td> <td>#(enjoy.name)</td> <td>enjoy为null或name不存在, 后台报错</td>
</tr>
<tr>
<td>enjoy.getName()</td> <td>#(enjoy.getName())</td> <td>enjoy.getName()与enjoy.name等同</td>
</tr>
<tr>
<td>enjoy.address ?? "no address field"</td> <td>#(enjoy.address ?? "no address field")</td> <td>enjoy.address不存在时输出默认值</td>
</tr>
<tr>
<td>enjoy.name, title</td> <td>#(enjoy.name, title)</td> <td>执行逗号前面表达式, 输出逗号后面的内容</td>
</tr>
<tr>
<td>if语句</td> <td>#@if()</td> <td><img alt="" src="#(ctx)/image/if.PNG" height="100"></td>
</tr>
<tr>
<td>elseif语句</td> <td>#@elseif()</td> <td><img alt="" src="#(ctx)/image/elseif.PNG" height="100"></td>
</tr>
<tr>
<td>for语句</td> <td>#@for()</td> <td><img alt="" src="#(ctx)/image/for.PNG" height="100"></td>
</tr>
<tr>
<td>forList语句</td> <td>#@forList()</td> <td><img alt="" src="#(ctx)/image/forList.PNG" height="100"></td>
</tr>
<tr>
<td>forMap语句</td> <td>#@forMap()</td> <td><img alt="" src="#(ctx)/image/forMap.PNG" height="100"></td>
</tr>
</tbody>
</table>
</div>
</body>
</html>
http://localhost/maven-jfinal/enjoy