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

河源网站建设 科技只做乡村旅游的网站

河源网站建设 科技,只做乡村旅游的网站,网站案例英文,百度百度一下就知道文章目录说明基本用法宏加载宏定义宏文件写法import和include区别内置方法注册全局共享变量处理空值和默认值获得hashmap的键值从map中拿对象遍历Map其它小技巧迁移事项参考说明 Freemarker 还存在我的一些老项目中#xff0c;比起前端框架#xff0c;自有它的简便之处… 文章目录说明基本用法宏加载宏定义宏文件写法import和include区别内置方法注册全局共享变量处理空值和默认值获得hashmap的键值从map中拿对象遍历Map其它小技巧迁移事项参考说明 Freemarker 还存在我的一些老项目中比起前端框架自有它的简便之处前后端合体的项目还是有用武之地的。Freemarker渲染性能也不差为何一定要放弃呢 基本用法 Java dataMap.put(“user”,new User()); ftl: ${user.getName()} …… #if (user.name)?? user.name ‘admin’ …… /#if 宏 没用过宏就不算用过freemarker。宏是组件复用的方式。 注意在IDEA中要创建freemarker_implicit.ftl文件在里面配置模板路径这样include一个模板文件时IDEA才能识别。 加载宏定义 定义一个宏的文件导入文件macro.ftl: #import pagination.ftl as pagination #import article-detail-listview.ftl as ArticleListview然后在FreemarkerConfig.java中加载: Beanpublic FreeMarkerConfigurer freeMarkerConfigurer() {//写入配置FreeMarkerConfigurer factory new FreeMarkerConfigurer();writerProperties(factory);//创建fm的配置并且将factory中的信息写入到configuration中freemarker.template.Configuration configuration null;try {configuration factory.createConfiguration();//和spring boot不同的部分这部分是用来写入我们需要的freemarker configurationListString autoIncludes Lists.newArrayListWithCapacity(1);//注意macro\macro.ftl这个路径是和在spring.freemarker.template-loader-path下autoIncludes.add(macro/macro.ftl);configuration.setAutoIncludes(autoIncludes);configuration.setClassForTemplateLoading(this.getClass(), /templates/);} catch (IOException e) {e.printStackTrace();} catch (TemplateException e) {e.printStackTrace();}factory.setConfiguration(configuration);return factory;}宏文件写法 #macro pagination target route totalPages pageNo startPageNo endPageNoscriptvar currentPageNo ${pageNo};var startPageNo ${startPageNo};var endPageNo ${endPageNo};function movePagination(target, direction){if(direction 1){startPageNo endPageNo 1;}else if (direction -1){startPageNo startPageNo - 10;}if(startPageNo 0){startPageNo 1;}endPageNo startPageNo 9;currentPageNo startPageNo;goPage(target, currentPageNo, startPageNo, endPageNo);}function goPage(target, pageNo, startPageNo, endPageNo){currentPageNo pageNo;startPageNo startPageNo;endPageNo endPageNo;var route ${route};if(route.indexOf(?) -1){route route ?11;}var url ${base}/ route pageNo pageNo startPageNo startPageNo endPageNo endPageNo;console.log(url)if (target.length 0) {$(#target).load(url);} else {window.location.href url;}}/script#assign recordsPerPage10/div classpagination-xdiv styletext-align: centerul#if (pageNo 1)#assign start (pageNo - 2) * recordsPerPage/a hrefjavascript:movePagination(${target}, -1);上一页/a/#if#if (totalPages 10)#-- ------------------------------ --#-- Always write the first 3 links --#-- ------------------------------ --#list 1 .. 3 as page#if (pagepageNo)li classactivespan classcurrent${page}/span/li#elselia hrefjavascript:goPage(${target}, ${page}, ${startPageNo}, ${endPageNo}) classpage-link${page}/a/li/#if/#list#-- ------------------ --#-- Intermediate links --#-- ------------------ --#if (pageNo 1 pageNo totalPages)#if (pageNo 5)span classgensmall.../span/#if#if (pageNo 4)#assign min pageNo - 1/#else#assign min 4//#if#if (pageNo totalPages - 4)#assign max pageNo 2/#else#assign max totalPages - 2//#if#if (max min 1)#list min .. max - 1 as page#if (pagepageNo)li classactivespan classcurrent${page}/span/li#elselia hrefjavascript:goPage(${target}, ${page}, ${startPageNo}, ${endPageNo}) classpage-link${page}/a/li/#if/#list/#if#if (pageNo totalPages - 4)span classgensmall.../span/#if#elsespan classgensmall.../span/#if#-- ---------------------- --#-- Write the last 3 links --#-- ---------------------- --#list totalPages - 2 .. totalPages as page#if (pagepageNo)li classactivespan classcurrent${page}/span/li#elselia hrefjavascript:goPage(${target}, ${page}, ${startPageNo}, ${endPageNo}) classpage-link${page}/a/li/#if/#list#else#list 1 .. totalPages as page#if (pagepageNo)li classactivespan classcurrent${page}/span/li#elselia hrefjavascript:goPage(${target}, ${page}, ${startPageNo}, ${endPageNo}) classpage-link${page}/a/li/#if/#list/#if#-- ------------- --#-- Next page --#-- ------------- --#if (pageNo totalPages)#assign start pageNo * recordsPerPage/a hrefjavascript:movePagination(${target}, 1);下一页/a/#if/ul/div/div /#macroimport和include区别 在使用freemarker作为前端页面模板的应用中会有很多的freemarker模板页面这些ftl会在不同的页面中重复使用一是为了简化布局的管理二是可以重复使用一些代码。 在freemarker中可以通过以下两种方式来使用已经存在的模板。他们是#inclue和#import标签。 1.#include directive 该标签的作用是将便签中指定的路径的ftl文件导入到使用标签的ftl文件中包括macro\funtion\variable等所有被引用的ftl内容。被引用的ftl内容会在引用的ftl中重新被渲染最终输出。一般用于页面拆分便于页面重用如将header和footer分别抽取出来独自成模板这样在所有返回给前端的page里都可以include这两个模板了。 #include “…/…/header.ftl” 将相对路径中的header.ftl文件加载到当前文件中。如header.ftl中定义了宏、函数等在当前文件中可以不加命名空间前缀直接使用。如在header.ftl中 定义了#marco getBranch,可以在当前文件中直接使用:getBranch…/getBranch. 2.#import directive 该标签的字面意义和include差不多经常会混淆使用。其含义是将标签中指定的模板中的已定义的宏、函数等导入到当前模板中并在当前文档中指定一个变量作为该模板命名空间以便当前文档引用。与include的区别是该指令不会讲import指定的模板内容渲染到引用的模板的输出中。 如#import ”…/…/service.ftl as service.其作用是将service.ftl中的定义的各宏、函数、变量、自定义、设置等内容用指定的命名空间名称加以引用。但是当前文档不会将import的模板输出插入到import标签的位置。和#include标签一样可以使用相对路径和绝对路径引用外部模板。 如service.ftl中定义的宏如下#macro branchService/#macro,在当前文档中可以这样导入#import “…/…/service.ftl” as service ,service变量作为该文档中使用service中服务的命名空间调用时应该这样:service.branchService …/service.branchService. 总结import比include好能防止include多次。 内置方法 Freemarker有很多内置方法操作常见数据类型比较方便。 采用调用例如 “abcabc”?index_of(“bc”) “123”number // 转为数字 注册全局共享变量 可以把页面中公共变量函数注册进去这样每个模版都能轻松使用 PostConstructpublic void setConfigure() throws Exception {configuration.setSharedVariable(base, /cms);configuration.setSharedVariable(title, CMS知识库);configuration.setSharedVariable(siteTitle, CMS知识库);configuration.setSharedVariable(CMSConstants.CMS_CONFIG, new CMSConfig());configuration.setSharedVariable(CMSConstants.CURRENT_CHANNEL, );// 配置常用函数configuration.setSharedVariable(randomNumber, new RandomNumberFunction());configuration.setSharedVariable(shuffle, new ShuffleFunction()); // configuration.setSharedVariable(CMSConstants.CURRENT_USER, new User());}处理空值和默认值 Welcome ${user!}! Welcome ${user!‘your name’}! 或者 ${user?if_exists} ${user?default(‘your name’)} 防止null ${category.categoryName!} ${user.name!‘想要展示的内容’} 获得hashmap的键值 categoryCache.get(bs.categoryId?c) // int to string categoryCache[bs.categoryId?c] // int to string 从map中拿对象 #assign category categoryCache[bs.categoryId?c].get() map中取值, c转为String #assign category categoryCache[bs.categoryId?c].get() 遍历Map #list categoryCache?keys as key#assign category categoryCache[key].get()${category.categoryName}/#list #if name??其它小技巧 判断List是否为空 #if orgList?? (orgList?size 0) #else 日期格式化: ${ebook.requestDate?string(“yyyy-MM-dd hh:mm:ss”)} 迁移事项 FileTemplateLoader和ClassTemplateLoader原来是从classpath中加载的include时路径按照classpath中的路径但现在是从文件系统中加载路径就得采用相对路径即每个template去include别人时路径要相当于该模板的路径。 参考 https://freemarker.apache.org/docs/index.html
http://www.eeditor.cn/news/125466/

相关文章:

  • 青岛做外贸网站建设工作汇报总结怎么写
  • 龙岗公司做网站深圳app网站
  • 做水晶接单在哪个网站接专业企业网站设计
  • 网站开发用什么框架合适推介做resume的网站
  • 网站未备案会怎么样做投标需要知道什么网站
  • 展馆的科普网站建设国际化的管理咨询公司
  • 制作一个网站界面设计图片IP怎么屏蔽网站域名
  • 网站建设销售实习报告网站资料要提供哪些
  • 昆山网站建设jofuns网站建设 竞标公司要求
  • 专业的建设企业网站公司辽宁身营商环境建设局网站
  • 网站建设公司推销网站开发要用什么工具软件
  • 官方网站建设优化wordpress图片质量插件
  • 微商城网站建设平台合同范本微信订阅号关键网站
  • 网站规划和建设的步骤绵阳做seo网站公司
  • erp系统教学兰州官网seo分析
  • 网站建设几点关门零食公司建立网站的原因
  • 工程建设网站怎么提交潮流印花图案设计网站
  • 网站建设与维护课程总结唯品会网站页面设计
  • 做yield网站多少钱骨干校建设专题网站
  • 衡阳网站定制google官方版下载
  • 四川住房城乡建设厅网站电话wordpress 需要授权吗
  • 网站建设 软件开发的公司哪家好wordpress 分栏
  • 网络服务商官方网站项目营销推广方案
  • 企业网站建设方案服务微信群二维码推广平台
  • 一站式手机网站制作大学生创新创业大赛策划书
  • 专门学设计的网站wordpress 广告拦截插件
  • 怎么在网站标头做图标网站设计导航栏高度
  • 建行网上银行登录入口官网seo排名优化方式
  • 网站seo优化的重要性百度网站收录更新
  • 为何网站建设公司报价不同WordPress京东淘宝主题