freemarker

Spring Boot Sample 014之spring-boot-error-controller

蹲街弑〆低调 提交于 2020-11-17 07:01:34
一、环境 Idea 2020.1 JDK 1.8 maven 二、目的 spring boot 异常处理controller实现方式。 gitHub地址: https://github.com/ouyushan/ouyushan-spring-boot-samples 三、步骤 3.1、点击File -> New Project -> Spring Initializer,点击next 3.2、选择Web依赖,选中Spring Web。可以选择Spring Boot版本,本次默认为2.2.6,点击Next 3.3、项目结构 四、添加文件 pom.xml文件 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework

FreeMarker兼容配置问题

守給你的承諾、 提交于 2020-10-22 17:41:59
说明两种出现异常情况: 首先在Controller中的代码是这样的: /** * 兼容配置 * * @param model * @return */ @GetMapping ( "/iftest2" ) public String test2(Model model) { //存放字符串类型 model.addAttribute( "token" , "1234" ); return "iftest2" ; } 第一种: if指令,比较的数据类型不一致,默认抛异常 <#--第一种 :if指令,比较的数据类型不一致,默认抛异常--> <#if token == 1234 > 煌sir666 </#if> 运行后报错: 情况2:${} 如果访问的数据不存在,默认抛异常 <#--第二种-${} 如果访问的数据不存在,默认抛异常--> ${ token3 } 报错: 解决方案: yml文件中添加一段配置即可 spring : freemarker : settings : classic_compatible : true #兼容模式 data : mongodb : uri : mongodb://localhost:27017/demo server : port : 8088 #服务端口 这样就不会报错,最终 情况1:如果类型不一致,将输出空 情况2:${不存在} , 将输出空

springboot中Thymeleaf和Freemarker模板引擎的区别

为君一笑 提交于 2020-10-17 01:41:30
前言 这两个都是属于模板引擎,但是各有各的好处, enn,在市面上比较多的也就是jsp、freemarker、velocity、thymeleaf等页面方案。 Thymeleaf和Freemarker的区别 FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出。FreeMarker与Web容器无关,即在Web运行时,它并不知道Servlet或HTTP。它不仅可以用作表现层的实现技术,而且还可以用于生成XML,JSP或Java 等。 目前企业中:主要用Freemarker做静态页面或是页面展示 优点: 1、不能编写java代码,可以实现严格的mvc分离 2、性能非常不错 3、对jsp标签支持良好 4、内置大量常用功能,使用非常方便 5、宏定义(类似jsp标签)非常方便 6、使用表达式语言 缺点: 1、不是官方标准 2、用户群体和第三方标签库没有jsp多 Thymeleaf是个XML/XHTML/HTML5模板引擎,可以用于Web与非Web应用。 Thymeleaf的主要目标在于提供一种可被浏览器正确显示的、格式良好的模板创建方式,因此也可以用作静态建模。你可以使用它创建经过验证的XML与HTML模板。相对于编写逻辑或代码,开发者只需将标签属性添加到模板中即可。接下来,这些标签属性就会在DOM(文档对象模型)上执行预先制定好的逻辑

Java Spring Boot VS .NetCore (十一)自定义标签 Java Tag Freemarker VS .NetCore Tag TagHelper

◇◆丶佛笑我妖孽 提交于 2020-10-08 03:13:00
这章介绍下 自定义标签,都知道在处理权限操作的时候,除了后台代码中处理,对于界面上没有权限的人员对于的权限按钮也不会显示 这一点无论是Java 还是.NetCore 也是有很多共同点 Java Freemarker 处理 首先来配置下Freemarker的代码,来设置按钮的显示 隐藏 @Configuration public class FreeMarkerConfig { @Autowired private freemarker.template.Configuration configuration; @PostConstruct public void setSharedVariable() { try { configuration.setSharedVariable( "freemark", new MyTags()); } catch (Exception e) { e.printStackTrace(); } } } 下面看下MyTags是什么? public class MyTags extends SimpleHash { public MyTags() { put( "hasRole", new RoleTag()); } } 自定义的Tag标签需要继承 SecureTag 这个基类,然后在渲染方法 render处理下就ok public abstract

java实现word生成并转pdf

大城市里の小女人 提交于 2020-09-25 10:59:14
前言 本篇博客主要解决java后台动态生成word(docx格式),并将word转换为pdf并添加水印。 思考 项目需求是要导出带水印的pdf,表格样式还是有点复杂的,之前考虑过用itextpdf根据html来生成pdf,但框架用的是前后台分 离的,前台用的是react,并且是在没有展示出表格的情况下,所以没法通过前台获取html代码块生成,后来又自己手动拼接 html,但代码量太大,难维护,且样式不怎么好看。所以决定用freemarker模板生成word,再转成pdf。翻阅网上很多资料给 出了很多方案将word转pdf,有用poi的、有用第三方工具的等等。用poi的写的都太复杂,jar引用很多,用第三方工具的有局 限性,不适合夸平台,需要安装服务。所以决定用docx4j,但docx4j只支持docx格式的word转pdf,所以需要freemarker 生成docx的word。 动手 1、pom引入依赖 < dependency > < groupId > com.itextpdf </ groupId > < artifactId > itextpdf </ artifactId > < version > 5.4.3 </ version > </ dependency > < dependency > < groupId > freemarker </ groupId > <

Freemarker详解(二)

跟風遠走 提交于 2020-08-20 05:39:51
这一篇续上篇, 让我们继续来学习一下,Freemarker,话不多说,煌sir带你上干货~~ 一. 其他指令 1.运算符 算数运算符:FreeMarker表达式中完全支持算术运算 算数运算符 + - * / % 逻辑运算符 逻辑 运算符 描述 && 逻辑与 || 逻辑或 ! 逻辑非 比较运算符 比较 运算符 描述 == 判断两个值是否相等 != 判断两个值是否不等 >或者gt 判断左边值是否大于右边值 >=或者gte 判断左边值是否大于等于右边值 <或者lt 判断左边值是否小于右边值 <=或者lte 判断左边值是否小于等于右边值 注意:>、>=、<、<= 可能出现与预期结果不一致的情况,建议使用等效的字母 实例 <#if num > 60 > num大于60 </#if> 如果num为100,num表示条件成立,输出结果: 60 > num 大于 60 建议编写方式 <#if num gt 60 > num大于60 </#if> 2. 空值处理 判断某变量是否存在使用 “??” 变量?? ,如果不为空返回true,如果为空返回false Controller: @GetMapping ( "/if" ) public String _if(Model model) { //设置数据 model.addAttribute( "token" , 1234 ); model

SpringBoot2 整合FreeMarker模板,完成页面静态化处理

淺唱寂寞╮ 提交于 2020-08-19 22:58:08
本文源码: GitHub·点这里 || GitEE·点这里 一、页面静态化 1、动静态页面 静态页面 即静态网页,指已经装载好内容HTML页面,无需经过请求服务器数据和编译过程,直接加载到客户浏览器上显示出来。通俗的说就是生成独立的HTML页面,且不与服务器进行数据交互。 优缺点描述: 静态网页的内容稳定,页面加载速度极快; 不与服务器交互,提升安全性; 静态网页的交互性差,数据实时性很低; 维度成本高,生成很多HTML页面; 动态页面 指跟静态网页相对的一种网页编程技术,页面的内容需要请求服务器获取,在不考虑缓存的情况下,服务接口的数据变化,页面加载的内容也会实时变化,显示的内容却是随着数据库操作的结果而动态改变的。 优缺点描述: 动态网页的实时获取数据,延迟性低; 依赖数据库交互,页面维护成本很低; 与数据库实时交互,安全控制的成本高; 页面加载速度十分依赖数据库和服务的性能; 动态页面和静态页面有很强的相对性,对比之下也比较好理解。 2、应用场景 动态页面静态化处理的应用场景非常多,例如: 大型网站的头部和底部,静态化之后统一加载; 媒体网站,内容经过渲染,直接转为HTML网页; 高并发下,CDN边缘节点代理的静态网页; 电商网站中,复杂的产品详情页处理; 静态化技术的根本:提示服务的响应速度,或者说使响应节点提前,如一般的流程,页面(客户端)请求服务,服务处理,响应数据

Freemarker导出word多图片遇到图片重复问题

折月煮酒 提交于 2020-08-17 07:46:19
遇到的都是缘分,记录一下美好回忆~ 公司要求做个一个word报告模板导出,其他的都挺顺利的,就是遇到一个多图片的展示部分,遇到图片重复的问题,图片个数不确定,所以用了list标签:代码如下: 具体的freemarker 导出word的知识大家可以百度下,这里不再做说明了~ 上面是错误实例,word 也能成功生成,就是这一块的图片总是重复的~ ,我观察后发现这三处像是一个唯一标示的数据, 就想方法动态替换下,结果好真的好使了,里面的id 部分可以不替换 ~ 如下是成功例子: 后面的是我又生成的ftl文件,和上面的多少会有出入,但是原理是正确的 第一次写博客,比较生涩,如果错误望大家不吝指正~ 下面是我Freemarker 的工具类和 ftl 模板,希望能给你提供到帮助... package com.na8000.bs.utils; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStreamWriter; import java.io.Writer; import java.net.URLEncoder;

java 导出pdf wkhtmltopdf 载入PDF时发生错误 stream must have data

女生的网名这么多〃 提交于 2020-08-17 06:20:40
原理是把需要填充打印的内容填充到freemarker模板文件ftl,然后生成html文件,然后java调用cmd命令行 把html生成pdf。总结起来就是一次填充两次写文件流一次读文件。 首先是要安装插件: https://wkhtmltopdf.org/downloads.html // 创建配置 Configuration cfg = new Configuration(new Version(2, 3, 0)); Process p = null; try { // 指定模板存放的路径 cfg.setDirectoryForTemplateLoading(new File(basePath + "/pdf/ftl")); cfg.setDefaultEncoding("UTF-8"); // 从上面指定的模板目录中加载对应的模板文件 Template temp = cfg.getTemplate(templateftl); // 将生成的内容写入contractTemplate .html中 String file1 = basePath + "/pdf/html/experReportView.html"; File file = new File(file1); if (!file.exists()) file.createNewFile(); Writer out =