freemarker 模板引擎解析对象
${user.userName!"默认值"}
freemarker 模板引擎取 Session 中取值
${Session.user.userName!"default value"}
freemarker 模板引擎遍历 list
<#if userLists?exists>
<#list userLists as leaveobj>
<tr>
<td class="text-center">${leaveobj_index+1}</td>
<td class="text-center">${leaveobj.userName!"设置默认值"}</td>
<td class="text-center">${leaveobj.userAge!"设置默认值"}</td>
</tr>
</#list>
</#if>
注意:无论是解析对象,还是遍历 list,都要设置默认值(即该值为空时的值),否则 freemarker 会报 The following has evaluated to null or missing 的错
以下以一个小 demo 为例,测试以上代码
项目框架使用 springboot
实体类
package com.freemark.bean;
public class User {
private String userName;
private Integer userAge;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public Integer getUserAge() {
return userAge;
}
public void setUserAge(Integer userAge) {
this.userAge = userAge;
}
}
controller 层
package com.freemark.controller;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpSession;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import com.freemark.bean.User;
@Controller
@RequestMapping("/freem")
public class DemoController {
/**
* 返回对象
* @return
*/
@RequestMapping("/user")
public ModelAndView getUser(HttpSession session) {
ModelAndView mav = new ModelAndView();
User user = new User();
user.setUserName("楚庄王");
//user.setUserAge(25);
session.setAttribute("user", user); // session中存值
mav.addObject("user", user);
mav.setViewName("user");
return mav;
}
/**
* 返回 list
* @return
*/
@RequestMapping("/user/list")
public ModelAndView getUserList() {
ModelAndView mav = new ModelAndView();
List<User> list = new ArrayList<User>();
User user1 = new User();
user1.setUserName("楚庄王");
user1.setUserAge(25);
list.add(user1);
User user2 = new User();
user2.setUserName("齐桓公");
user2.setUserAge(18);
list.add(user2);
User user3 = new User();
user3.setUserName("晋文公");
user3.setUserAge(60);
list.add(user3);
User user4 = new User();
user4.setUserName("秦穆公");
user4.setUserAge(55);
list.add(user4);
User user5 = new User();
user5.setUserName("吴王阖闾");
user5.setUserAge(27);
list.add(user5);
mav.addObject("userLists", list);
mav.setViewName("userList");
return mav;
}
}
user.ftl 页面
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>freemarker解析对象</title>
</head>
<body>
session中取值 ${Session.user.userName!"default value"}
<br>
${user.userName!"默认值"}
${user.userAge!"30"}
</body>
</html>
userList.ftl 页面
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>freemarker遍历list</title>
</head>
<body>
<table border="1">
<tr>
<td class="text-center"><strong>序号</strong></td>
<td class="text-center"><strong>用户名</strong></td>
<td class="text-center"><strong>年龄</strong></td>
</tr>
<#if userLists?exists>
<#list userLists as leaveobj>
<tr>
<td class="text-center">${leaveobj_index+1}</td>
<td class="text-center">${leaveobj.userName!"设置默认值"}</td>
<td class="text-center">${leaveobj.userAge!"设置默认值"}</td>
</tr>
</#list>
</#if>
</table>
</body>
</html>
注意: ${leaveobj_index+1} 为 freemarker 模板自带的序号自增, +1 为从 1 开始;${leaveobj_index} 为从 0 开始
测试
访问 http://localhost:8080/freem/user
访问 http://localhost:8080/freem/user/list