freemark:模板引擎
freemarker提供模板,Java提供数据,合在一起出现效果
1.Template file:模板文件
2.Java Object:Java对象,一般通过Map封装对象
3. (1,2)通过freemark引擎处理输出数据
模板:index.ftl
.ftl:freemarker Temlate简称,可随意定义
取值:${user}
Java文件:
1.创建freemarker配置实例
Configuration cfg=new Configuration ();
cfg.setDirecoryForTemplateLoading(new File("template"))
2.创建数据模型
Map root=new HashMap();
root.put(“user”,"admin");
3.加载模板文件
Tumplate tl=cfg.getTumplate("index.ftl");
4.显示生成的数据
Writer out=new OutputStreamWriter(System.out);
tl.procues(root,out);
freemarker提供模板,Java提供数据,合在一起出现效果
1.Template file:模板文件
2.Java Object:Java对象,一般通过Map封装对象
3. (1,2)通过freemark引擎处理输出数据
模板:index.ftl
.ftl:freemarker Temlate简称,可随意定义
取值:${user}
Java文件:
1.创建freemarker配置实例
Configuration cfg=new Configuration ();
cfg.setDirecoryForTemplateLoading(new File("template"))
2.创建数据模型
Map root=new HashMap();
root.put(“user”,"admin");
3.加载模板文件
Tumplate tl=cfg.getTumplate("index.ftl");
4.显示生成的数据
Writer out=new OutputStreamWriter(System.out);
tl.procues(root,out);
out.flush
package com.shop.front.tag;
import com.shop.front.bean.NewsListBean;
import com.shop.front.bean.PageBean;
import com.shop.front.service.ITagNewsListService;
import freemarker.core.Environment;
import freemarker.template.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 类描述:新闻列表标签
* 创建人:liuhao
*/
@Component("TagNewsList")
public class TagNewsListDirective implements TemplateDirectiveModel {
@Autowired
private ITagNewsListService tagNewsListServiceImpl;
@Override
public void execute(Environment environment, Map map, TemplateModel[] templateModels, TemplateDirectiveBody templateDirectiveBody) throws TemplateException, IOException {
//栏目id
String cidsValue = map.get("cids") + "";
String cids = null;
if (cidsValue != null && !"null".equals(cidsValue)) {
cids = cidsValue;
} else {
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
String cidValue = request.getParameter("cid") + "";
String cid = null;
if (cidValue != null && !"null".equals(cidValue)) {
cids = cidValue;
request.setAttribute("cid", cidValue);
}
}
//是否分页
String isPageValue = map.get("isPage") + "";
Boolean isPage = false;
if (isPageValue != null && "true".equals(isPageValue)) {
isPage = true;
}
//显示条数
String countValue = map.get("count") + "";//这里模版页面传进来的参数
Integer count = null;
if (countValue != null && !"null".equals(countValue)) {
count = Integer.parseInt(countValue);
}
//栏目标识
String markerValue = map.get("marker") + "";//这里模版页面传进来的参数
String marker = null;
if (markerValue != null && !"null".equals(markerValue)) {
marker = markerValue;
}
//标题长度
String titLenValue = map.get("titLen") + "";//这里模版页面传进来的参数
Integer titLen = null;
if (titLenValue != null && !"null".equals(titLenValue)) {
titLen = Integer.parseInt(titLenValue);
}
//标题长度
String subLenValue = map.get("subLen") + "";//这里模版页面传进来的参数
Integer subLen = null;
if (subLenValue != null && !"null".equals(subLenValue)) {
subLen = Integer.parseInt(subLenValue);
}
//时间格式
String dateFormatValue = map.get("dateFormat") + "";//这里模版页面传进来的参数
String dateFormat = null;
if (dateFormatValue != null && !"null".equals(dateFormatValue)) {
dateFormat = dateFormatValue;
}
//截取标题长度后省略
String appendValue = map.get("append") + "";//这里模版页面传进来的参数
String append = null;
if (appendValue != null && !"null".equals(appendValue)) {
append = appendValue;
}
//排序,0表sort倒序,1表sort升序,2表时间倒序,3表时间升序,4表sort倒序和时间倒序
String orderValue = map.get("order") + "";//这里模版页面传进来的参数
Integer order = null;
if (orderValue != null && !"null".equals(orderValue)) {
order = Integer.parseInt(orderValue);
}
PageBean pageBean = new PageBean();
if (isPage) {
String urlPath = getRequestURL();
//url前面部分
String frontUrl = urlPath.substring(0, urlPath.lastIndexOf("/") + 1);
//url后面部分
String lastUrl = urlPath.substring(urlPath.lastIndexOf("/") + 1, urlPath.length());
Integer currentPage = 1;
if (lastUrl.indexOf("_") != -1) {
currentPage = Integer.valueOf(lastUrl.substring(lastUrl.lastIndexOf("_") + 1, lastUrl.indexOf(".htm")));
} else {
currentPage = 1;
}
// //当前页面码
// String currentPageValue = map.get("currentPage")+"";
//
// if (currentPageValue!=null && !"null".equals(currentPageValue)) {
// currentPage = Integer.parseInt(currentPageValue);
// }
pageBean = tagNewsListServiceImpl.getPageBean(cids, marker, count, currentPage);
String homePage = null;
String prevPage = null;
String nextPage = null;
String trailerPage = null;
if (pageBean.getTotalPages() > 1) {
//当前页面大于1,小于总页数
if (currentPage > 1 && currentPage < pageBean.getTotalPages()) {
homePage = frontUrl + "index.htm";
prevPage = frontUrl + "index_" + (currentPage - 1) + ".htm";
nextPage = frontUrl + "index_" + (currentPage + 1) + ".htm";
trailerPage = frontUrl + "index_" + pageBean.getTotalPages() + ".htm";
} else if (currentPage == 1) {
nextPage = frontUrl + "index_" + (currentPage + 1) + ".htm";
trailerPage = frontUrl + "index_" + pageBean.getTotalPages() + ".htm";
} else if (currentPage == pageBean.getTotalPages()) {
homePage = frontUrl + "index.htm";
prevPage = frontUrl + "index_" + (currentPage - 1) + ".htm";
}
}
pageBean.setHomePage(homePage);
pageBean.setPrevPage(prevPage);
pageBean.setNextPage(nextPage);
pageBean.setTrailerPage(trailerPage);
}
TemplateModel templateModelPageBean = ObjectWrapper.DEFAULT_WRAPPER.wrap(pageBean);
environment.setVariable("pageBean", templateModelPageBean);
List<NewsListBean> list = tagNewsListServiceImpl.getNewsList(cids, count, pageBean.getStartRow(), marker, titLen, subLen, dateFormat, order, append);
TemplateModel templateModel = ObjectWrapper.DEFAULT_WRAPPER.wrap(list);
environment.setVariable("list", templateModel);
if (templateDirectiveBody != null) {
try {
templateDirectiveBody.render(environment.getOut());
} catch (Exception e) {
e.printStackTrace();
}
} else {
throw new RuntimeException("missing body");
}
}
//JAVA 获取完整URL 方法
public String getRequestURL() {
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
if (request == null) {
return "";
}
String url = "";
url = request.getContextPath();
url = url + request.getServletPath();
java.util.Enumeration names = request.getParameterNames();
int i = 0;
if (names != null) {
while (names.hasMoreElements()) {
String name = (String) names.nextElement();
if (i == 0) {
url = url + "?";
} else {
url = url + "&";
}
i++;
String value = request.getParameter(name);
if (value == null) {
value = "";
}
url = url + name + "=" + value;
try {
// java.net.URLEncoder.encode(url, "ISO-8859");
} catch (Exception e) {
e.printStackTrace();
}
}
}
try {
// String enUrl = java.net.URLEncoder.encode(url, "utf-8");
} catch (Exception ex) {
ex.printStackTrace();
}
return url;
}
public ITagNewsListService getTagNewsListServiceImpl() {
return tagNewsListServiceImpl;
}
public void setTagNewsListServiceImpl(ITagNewsListService tagNewsListServiceImpl) {
this.tagNewsListServiceImpl = tagNewsListServiceImpl;
}
}
.ftl:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>商城首页</title>
</head>
<body>
<@TagNewsList cids='1'>
<#list list as l>
${l.title}<br>
${l.subTitle}<br>
${l.titleImage}<br>
${l.author}<br>
</#list>
</@TagNewsList>
</body>
</html>