当前位置: 首页 > wzjs >正文

永嘉专业网站建设团队樟木头网站仿做

永嘉专业网站建设团队,樟木头网站仿做,衡阳网站建设要点推广,普陀区网站建设前端1 基本使用 1.1 介绍 FreeMarker 是一款模板引擎: 即一种基于模板和要改变的数据,并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。 是一个Java类库。 FreeMarker 被设计用来生成 HTML Web 页面…

 1 基本使用

1.1 介绍

        FreeMarker 是一款模板引擎: 即一种基于模板和要改变的数据,并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。 是一个Java类库。

        FreeMarker 被设计用来生成 HTML Web 页面,特别是基于 MVC 模式的应用程序,将视图从业务逻辑中抽离处理,业务中不再包括视图的展示,而是将视图交给 FreeMarker 来输出。虽然 FreeMarker 具有一些编程的能力,但通常由 Java 程序准备要显示的数据,由 FreeMarker 生成页面,通过模板显示准备的数据(如下图):

  • 能够生成各种文本:HTML、XML、RTF、Java 源代码等等
  • 易于嵌入到你的产品中:轻量级;不需要 Servlet 环境
  • 插件式模板载入器:可以从任何源载入模板,如本地文件、数据库等等
  • 可以按你所需生成文本:保存到本地文件;作为 Email 发送;从 Web 应用程序发送它返回给 Web 浏览器

1.2 引入依赖

        <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-freemarker</artifactId></dependency>

1.3 编写模版

        根据 Spring Boot 约定,模板文件应该放在 src/main/resources 目录下的 templates 目录中。下面模板只是简单地输出了 Model 中的 title 属性。

<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><title>Freemarker</title>
</head>
<body>
Hello ${title}!
</body>
</html>

1.4 配置属性

        Spring Boot 提供了很多配置属性,可用于在 application.yaml | properties 中定制 Freemarker。 这些属性都以 spring.freemarker 开头。freemarker必要配置如下:

  freemarker:template-loader-path: classpath:/templates  # classpath:  一定不能漏写cache: falsecharset: UTF-8check-template-location: truecontent-type: text/htmlexpose-request-attributes: falseexpose-session-attributes: falserequest-context-attribute: reqsuffix: .ftl

        下面列举常见配置项。

  freemarker:# 启用 freemarker 模板enabled: true# 是否缓存cache: false# Content Typecontent-type: text/html# 编码,默认utf-8charset: utf-8# 模板后缀suffix: .ftl# 引用 request 的属性名称request-context-attribute: request# 是否暴露 request 域中的属性expose-request-attributes: false# 是否暴露session域中的属性expose-session-attributes: false# request 域中的属性是否可以覆盖 controller 的 model 的同名项。默认 false,如果发生同名属性覆盖的情况会抛出异常allow-request-override: true# session 域中的属性是否可以覆盖 controller 的 model 的同名项。默认 false,如果发生同名属性覆盖的情况会抛出异常allow-session-override: true# 暴露官方提供的宏expose-spring-macro-helpers: true# 启动时检查模板位置是否有效check-template-location: true# 优先加载文件系统的模板prefer-file-system-access: true# 模板所在位置(目录)template-loader-path:- classpath:/templates/settings:datetime_format: yyyy-MM-dd HH:mm:ss      # date 输出格式化template_update_delay: 30m                # 模板引擎刷新时间default_encoding: utf-8                   # 默认编码

1.5 定义 Controller

        在 ModelAndView 对象的构造函数中指定要渲染的视图(模板),不需要添加 .ftl 后缀,因为已经统一在配置文件中定义了。

package com.ywz.project;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.servlet.ModelAndView;@Controller
public class IndexController {@GetMapping("/index")public ModelAndView index () {// 创建 ModelAndView 对象,并指定视图名称ModelAndView modelAndView = new ModelAndView("index/index");// 添加 title 属性到 ModelmodelAndView.addObject("title", "Freemarker");return modelAndView;}
}

1.6 启动项目通过浏览器访问

2 FreeMarker 数据类型

        FreeMarker模板中的数据类型由如下几种:

  • 布尔型:等价于java的Boolean类型,不同的是不能直接输出,可转化为字符串输出
  • 日期型:等价于java的Date类型,不同的是不能直接输出,需要转换为字符串再输出
  • 数值型:等价于java中int,float,double等数值类型   (有三种显示形式:数值型(默认)、货币型、百分比型)
  • 字符型:等价于java中的字符串,有很多内置函数
  • sequence类型:等价于java中的数组,list,set等集合类型
  • hash类型:等价于java中的Map类型

2.1 布尔类型

modelAndView.addObject("flag", true);
<h4>FreeMarker 数据类型</h4>
<#--FreeMarker 数据类型布尔类型在freeMarker页面中不能直接输出,如果要输出需要转换成字符串方式一:?c方式二:?string 或 ?string('为true时显示的内容','为false时显示的内容')方式三:?then('为true时显示的内容','为false时显示的内容')
-->
<h5>布尔类型</h5><br/>
${flag?c}<br/>
${flag?string}<br/>
${flag?string('yes','no')}<br/>
${flag?string('喜欢','不喜欢')}<br/>${flag?then('yes','no')}<br/>
${flag?then('喜欢','不喜欢')}<br/>

2.2 日期类型

modelAndView.addObject("createDate",new Date());
<#--数据类型:日期类型在freemarker中日期类型不能直接输出:如果输出要先转成日期型或字符串1.年月日   ?date2.时分秒   ?time3.年月日时分秒 ?datetime4.指定格式   ?string ("自定义格式")y: 年 M:月 d:日H: 时 m:分 s:秒
--><#-- 输出日期格式 -->${createDate?date} <br/>
<#-- 输出时间格式 -->${createDate?time}<br/>
<#-- 输出日期时间格式 -->${createDate?datetime} <br/>
<#-- 输出格式化日期格式 -->${createDate?string("yyyy年MM月dd日 HH:mm:ss")}<br/>

2.3 数值类型

        modelAndView.addObject("age", 18);modelAndView.addObject("salary", 10000);modelAndView.addObject("avg", 0.545);
<#--数据类型:数值类型在freemarker中数值类型可以直接输出;1.转字符串普通字符串   ?c货币型字符串  ?string.currency百分比型字符串 ?string.percent2.保留浮点型数值指定小数位(#表示一个小数位)?string["0.##"
-->
<#-- 直接输出数值型 -->
${age} <br/>
${salary} <br/>
${avg} <br/><#-- 将数值转换成字符串类型 -->
${salary?c} <br/><#-- 将数值转化成货币类型字符串 -->
${salary?string.currency} <br/><#-- 将数值转化成百分比类型的字符串 -->
${avg?string.percent} <br/><#-- 将浮点型的数值转换成指定小数位输出(四舍五入) -->
${avg?string["0.##"]} <br/>

2.4 字符串类型

        modelAndView.addObject("msg", "Hello");modelAndView.addObject("msg2", "freemarker");
<#--数据类型:字符串类型在freemarker中字符串类型可以直接输出:1.截取字符串(左闭右开)?substring(start,end)2.首字母小写输出 ?uncap_first3.首字母大写输出 ?cap_first4.字母转小写输出 ?lower_case5.字母转大写输出 ?upper_case6.获取字符串长度 ?length7.是否以指定字符开头(boolean 类型) ?starts_with("xx")?string8.是否以指定字符结尾(boolean 类型) ?ends_with("xx")?string9.获取指定字符的索引 ?index_of("xx")10.去除字符串前后空格 ?trim11.替换指定字符串 ?replace("xx","xx")
-->${msg} -- ${msg2} <br/>
${msg?string} -- ${msg2?string} <br/>
<#--1.截取字符串(左闭右开)?substring(start,end)-->
${msg?substring(0,2)}<br/>
<#--2.首字母小写输出 ?uncap_first-->
${msg?uncap_first}<br/>
<#--3.首字母大写输出 ?cap_first-->
${msg?cap_first}<br/>
<#--4.字母转小写输出 ?lower_case-->
${msg?lower_case}<br/>
<#--5.字母转大写输出 ?upper_case-->
${msg2?upper_case}<br/>
<#--6.获取字符串长度 ?length-->
${msg?length}<br/>
<#--7.是否以指定字符开头(boolean 类型) ?starts_with("xx")?string-->
${msg?starts_with("a")?string}<br/>
<#--8.是否以指定字符结尾(boolean 类型) ?ends_with("xx")?string-->
${msg?ends_with("o")?string}<br/>
<#--9.获取指定字符的索引 ?index_of("xx")-->
${msg2?index_of("m")}<br/>
<#--10.去除字符串前后空格 ?trim-->
${msg2?trim}<br/>
<#--11.替换指定字符串 ?replace("xx","xx")-->
${msg?replace("he","we")}<br/>

2.5 空值类型

        modelAndView.addObject("str1", null);modelAndView.addObject("str2", "");
<#--
字符串空值情况处理:FreeMarker的变量必须赋值,否则就会抛出异常。而对于FreeMarker来说,null值和不存在的变量是完全一样的,因为FreeMarker无法理解null值。FreeMarker提供两个运算符来避免空值:①!:指定缺失变量的默认值${value!}:如果value值为空,则默认值是空字符串${value!"默认值"}:如果value值为空,则默认值是字符串“默认值”②??:判断变量是否存在如果变量存在,返回true,否则返回false${(value??)?string}--><#-- 如果值不存在,直接输出会报错 -->
<#-- ${bb}--><#-- 值为null的数据 -->
<#--${str1}<br/>--><#-- 值为空字符串的数据 -->
${str2}<br/>
<#-- 使用!,当值不存在时,默认显示空字符串 -->
${str!}<br/>
<#-- 使用!"xx",当值不存在时,默认显示指定字符串 -->
${str!"这是一个默认值"}<br/>
<#-- 使用??,判断字符串是否为空;返回布尔类型,如果想要输出,需要将布尔类型转换成字符串-->
${(str??)?string}<br/>

2.6 sequence类型

        //序列类型 (数组、List、Set)//数组操作String[] stars = new String[]{"周杰伦","林俊杰","陈奕迅","五月天"};modelAndView.addObject("stars",stars);//List操作List<String> citys = Arrays.asList("上海","北京","杭州","深圳");modelAndView.addObject("cityList",citys);//JavaBean集合List<User> userList = new ArrayList<>();userList.add(new User(1,"zhangsan",22));userList.add(new User(2,"lisi",18));userList.add(new User(3,"wangwu",20));modelAndView.addObject("userList",userList);
<#--FreeMarker 数据类型序列类型 (数组、List、Set)通过list指令输出序列<#list 序列名 as 元素名>${元素名}</#list>获取序列的长度        ${序列名?size}获取序列元素的下标     ${元素名?index}获取第一个元素        ${序列名?first}获取最后一个元素       ${序列名?last}倒序输出    序列名?reverse升序输出    序列名?sort降序输出    序列名?sort?reverse指定字段名排序   序列名?sort_by("字段名")注:一般是JavaBean集合,对应的字段名需要提供get方法
--><#-- 数组操作 -->
<#list stars as star>下标:${star?index}-姓名:${star}<br/>
</#list>获取序列的长度:  ${stars?size}<br/>
获取第一个元素:   ${stars?first}<br/>
获取最后一个元素:  ${stars?last}<br/><#-- List操作 -->
<#list cityList as city>${city}-
</#list>
<br/>
<#--倒序输出    序列名?reverse-->
<#list cityList?reverse as city>${city}-
</#list>
<br/>
<#--升序输出    序列名?sort-->
<#list cityList?sort as city>${city}-
</#list>
<br/>
<#--降序输出    序列名?sort?reverse-->
<#list cityList?sort?reverse as city>${city}-
</#list>
<br/><#list userList as user>编号:${user.id}&nbsp;姓名:${user.username}&nbsp;${user.age}<br/>
</#list><#--指定字段名排序   序列名?sort_by("字段名")-->
<#list userList?sort_by("age") as user>编号:${user.id}&nbsp;姓名:${user.username}&nbsp;${user.age}<br/>
</#list>

2.7 Hash类型

        //Map操作Map<String, String> cityMap = new HashMap<>();cityMap.put("sh", "上海");cityMap.put("bj", "北京");cityMap.put("sz", "深圳");modelAndView.addObject("cityMap", cityMap);
<#--数据类型:hash类型key遍历输出<#list hash?keys as key>${key} -- ${hash[key]}</#list>value遍历输出<#list hash?values as value>${value}</#list>
-->
<#-- key遍历输出 -->
<#list cityMap?keys as key>${key} -- ${cityMap[key]} <br/>
</#list><#--value遍历输出-->
<#list cityMap?values as value>${value}<br/>
</#list>

文章转载自:

http://TvfekMS8.Lwrks.cn
http://EenyVsuD.Lwrks.cn
http://4uzM4AY0.Lwrks.cn
http://zBNciqjk.Lwrks.cn
http://znP5P06D.Lwrks.cn
http://rwG1bC6O.Lwrks.cn
http://qXPPk7A9.Lwrks.cn
http://S0TZQO4w.Lwrks.cn
http://Hi3lZ4zt.Lwrks.cn
http://nxK3FPpc.Lwrks.cn
http://0pnnG97X.Lwrks.cn
http://7hW2SZl1.Lwrks.cn
http://xKbBgZFo.Lwrks.cn
http://WAlqnbTb.Lwrks.cn
http://E1VRLFAi.Lwrks.cn
http://ZTjVoyIW.Lwrks.cn
http://vGbvKtoR.Lwrks.cn
http://gZPgbpHP.Lwrks.cn
http://2MtaoeLq.Lwrks.cn
http://E9OOKRXG.Lwrks.cn
http://INDMEeSC.Lwrks.cn
http://BYIIBp1l.Lwrks.cn
http://IjcXJv8k.Lwrks.cn
http://ggK3TBtd.Lwrks.cn
http://KoBvERXP.Lwrks.cn
http://1B65zf3G.Lwrks.cn
http://lxbvNAWO.Lwrks.cn
http://Qwj93pXo.Lwrks.cn
http://8kO1zaX0.Lwrks.cn
http://J6al7j85.Lwrks.cn
http://www.dtcms.com/wzjs/730739.html

相关文章:

  • 做简单的企业网站需要学哪些wordpress可以做seo吗
  • wordpress 移动建站手机写网页
  • wordpress全站音频建设银行网站公告在哪
  • 贵阳网站设计模板个人电台网站模版
  • WordPress为什么给我发邮件seo顾问赚钱吗
  • 搭建网站用什么软件如何确定wordpress
  • 建站都需要什么开放平台api
  • 动态h5网站开发广州公司摇号申请网站
  • 专业的网站设计建设网站做收付款接口
  • 北京的网站建设收费标准学校网站建设介绍范文
  • 电子商务的建站流程0元创业
  • 江门网站制作华企立方刘涛做的婴儿玩具网站
  • 搭积木建网站软件建站宝盒破解版
  • 建网站app需要多少钱天津住房和城乡建设建造师网站
  • 设计公司网站建设模板图ps海报制作教程步骤的网站
  • 做网站项目所需资源电子网站模板
  • 专业的团队网站建设建设银行官网首页网站招聘
  • 站长工具黄网站推广的方式
  • 移动端购物网站建设目的微网站建设价格对比
  • 东莞手机网站建设怎么选文案策划公司
  • 北京西直门附近网站建设公司一般网站建设的流程
  • 做一个官方网站需要多少钱台州网页设计模板
  • 手机建网站 优帮云苏州推荐网络公司建网站
  • 网站开发案例详解微信公众号文章怎么转wordpress
  • 网站建设的优点与不足网页设计的八种样式
  • c 建设网站iis建设旅游网站的功能定位
  • 承德做网站的公司google play三件套
  • 用php做电商网站有哪些江西网站建设技术
  • 做ic用什么网站毕设做网站和app
  • 荆州做网站wordpress musik