Freemarker作为前端展现层

Freemarker具有丰富前端展现能力,SpringBoot默认使用Freemarker展现前台页面。

POM.xml


  4.0.0
  com.test
  Proj_Good
  war
  0.0.1-SNAPSHOT
  Proj_Good Maven Webapp
  http://maven.apache.org
    
    
        org.springframework.boot
        spring-boot-starter-parent
        1.5.6.RELEASE
        
    

    
        
            junit
            junit
            3.8.1
            test
        
        
            org.springframework.boot
            spring-boot-starter-web
        
        
            org.springframework.boot
            spring-boot-starter-aop
        
        
            org.springframework.boot
            spring-boot-starter-data-redis
        

        
            org.mybatis.spring.boot
            mybatis-spring-boot-starter
            1.3.0
        
 
        
            org.springframework.boot
            spring-boot-starter-freemarker
        
        
            org.springframework.data
            spring-data-solr
        
        
            org.springframework.boot
            spring-boot-devtools
            true
            true
        
        
            com.alibaba
            druid
            1.1.6
            
                
                    com.alibaba
                    jconsole
                
                
                    com.alibaba
                    tools
                
            
        
        
            mysql
            mysql-connector-java
        

		
        
            org.apache.tomcat.embed
            tomcat-embed-jasper
        
        
            javax.servlet
            jstl
        
        
            taglibs
            standard
            1.1.2
        


        
        
            com.github.pagehelper
            pagehelper-spring-boot-starter
            1.1.2
        
        
            commons-beanutils
            commons-beanutils-core
            1.8.3
        
		
    
  
    Proj_Good
  


application.properties

#SpringBoot服务端口配置
server.port=6060
server.context-path=/

#spring.resources.static-locations=/css,/images,/img,/js

#SpringMVC JSP目录配置
#spring.mvc.view.prefix=/WEB-INF/jsp/
#spring.mvc.view.suffix=.jsp

spring.freemarker.template-loader-path=/WEB-INF/ftl/
spring.freemarker.suffix=.ftl

#Http编码配置   
spring.http.encoding.force=true
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true

#数据源配置    
spring.datasource.name=w2
spring.datasource.url=jdbc:mysql://localhost:3306/w2?useUnicode=true&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.maxActive=20
spring.datasource.initialSize=1
spring.datasource.maxWait=60000
spring.datasource.minIdle=1

#Mybatis实体类配置    
mybatis.mapper-locations=classpath:mapper/*.xml

#Solr配置    
spring.data.solr.host=http://localhost:8984/solr/new_core2

#日志配置
logging.file=d:/springboot.log
logging.level.com.test.mapper=DEBUG
logging.level.com.test.service.impl=DEBUG

Freemarker模板存放位置
Freemarker作为前端展现层_第1张图片

Good.ftl







商品列表




商品名称 分类名称 <#include "common.ftl"> <#assign nameList=["名称","价格-order","上架日期","分类名称","操作"]> <#assign colList=["name","price","dt","typeName"]> <#assign btnName="修改"> <#assign btnOnclick="domodify"> <@grid nameList goods colList btnName btnOnclick/> ${pageHtml }

Common.ftl

<#macro grid nameList valList colList btnName,btnOnclick>
	
			<#list nameList as c>
				<#if c?string?ends_with("-order")>
					<#local i=c?string?index_of("-order")>
					
				<#else>
					
		<#list valList as v>
			
				<#list colList as c>
					
全选${c?string?substring(0,i)} <#if sort=="desc"> <#else> ${c}
${v["${c}"]}

Add.ftl








商品添加



名称
价格
上架日期
分类

GoodCtrl.java

package com.test.ctrl;

import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.test.bean.GoodInfo;
import com.test.bean.TypeInfo;
import com.test.service.IGoodService;
import com.test.util.PageUtil;
import com.test.util.PageUtil2;

@Controller
public class GoodCtrl {
	@Autowired
	private IGoodService serv;
	
	@RequestMapping("/list")
	public String list(HttpServletRequest req,Integer page,Integer rows)
	{
		if(page == null)
			page = 1;
		if(rows == null)
			rows = 4;
		String gname = req.getParameter("gname");
		String tname = req.getParameter("tname");
		String sort = req.getParameter("sort");
		if(sort == null || "".equals(sort))
			sort = "asc";
		System.out.println("gname="+gname+",tname="+tname+",sort="+sort);
		//分页插件
		PageHelper.startPage(page, rows);
		List list = serv.findGood(gname, tname,sort);
		//定义分页对象
		PageInfo pi = new PageInfo(list);
		Long total = pi.getTotal();
		List goods = pi.getList();
		//page 当前页
		//rows 每页记录数
		//total 全部记录数
		//url 列表URL
		String url = "/list";
		//String pageHtml = PageUtil.toHtml(url, page, rows, total);
		
		PageUtil2 pu2 = new PageUtil2(url, page, rows, total);
		String pageHtml = pu2.toHtml();
		req.setAttribute("pageHtml", pageHtml);
		req.setAttribute("goods", goods);
		req.setAttribute("gname", gname);
		req.setAttribute("tname", tname);
		req.setAttribute("sort", sort);
		return "good";
	}
	
	@RequestMapping("/add")
	public String add(HttpServletRequest req)
	{
		String id = req.getParameter("id");
		List types = serv.findType();
		
		if(id != null)
		{
			GoodInfo gi = serv.findGoodById(new Integer(id));
			req.setAttribute("good", gi);
			
			for(TypeInfo ti:types)
			{
				if(gi.getTypeId() == ti.getId())
					ti.setSelected("selected");
			}
		}
		else
		{
			req.setAttribute("good", new GoodInfo());
		}
		req.setAttribute("types", types);
		return "add";
	}
	
	@RequestMapping("/save")
	public String save(HttpServletRequest req,GoodInfo gi)
	{
		Integer id = gi.getId();
		System.out.println("id==="+id);
		if(id != null)
		{
			//修改
			serv.updateGood(gi);
		}
		else
		{
			//新增
			serv.saveGood(gi);
		}
		return "redirect:/list";
	}
	
	@RequestMapping("/delete")
	public String delete(HttpServletRequest req,Integer[] chkid)
	{
		if(chkid != null)
		{
			for(Integer id:chkid)
				serv.deleteGood(id);
		}
		return "redirect:/list";
	}
}

IGoodService.java

package com.test.service;

import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.test.bean.GoodInfo;
import com.test.bean.TypeInfo;

public interface IGoodService {
	public List findGood(String gname,String tname,String sort);
	public List findType();
	public GoodInfo findGoodById(Integer id);
	public void saveGood(GoodInfo gi);
	public void updateGood(GoodInfo gi);
	public void deleteGood(Integer id);
}

GoodServiceImpl.java

package com.test.service.impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import com.test.bean.GoodInfo;
import com.test.bean.TypeInfo;
import com.test.mapper.GoodMapper;
import com.test.service.IGoodService;

@Service
public class GoodServiceImpl implements IGoodService{
	@Autowired
	private GoodMapper mapper;

	@Override
	public List findGood(String gname, String tname,String sort) {
		try
		{
			return mapper.findGood(gname, tname,sort);
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
		return null;
	}

	@Override
	public List findType() {
		try
		{
			return mapper.findType();
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
		return null;
	}

	@Transactional(readOnly=true)
	@Override
	public GoodInfo findGoodById(Integer id) {
		try
		{
			return mapper.findGoodById(id);
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
		return null;
	}

	@Transactional
	@Override
	public void saveGood(GoodInfo gi) {
		try
		{
			mapper.saveGood(gi);
			
			//typeServ.saveType()
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
	}

	@Override
	public void updateGood(GoodInfo gi) {
		try
		{
			mapper.updateGood(gi);
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
	}

	@Override
	public void deleteGood(Integer id) {
		try
		{
			mapper.deleteGood(id);
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
	}
	
}

效果图
Freemarker作为前端展现层_第2张图片

代码下载

https://pan.baidu.com/s/15kWRW-0h5Tlx-CTpYJxECw

你可能感兴趣的:(Freemarker)