java模板引擎生成html_使用Themleaf 模板引擎手动生成html文件

java模板引擎生成html_使用Themleaf 模板引擎手动生成html文件1 为什么要写这一篇呢 在做一个邮件发送功能的时候 需要发送 html 邮件 javaMail 发送 html 的时候需要有已经生成的 html 正文 所以需要提前将要发送的内容生成 所以就需要模板引擎来动态填充数据 publicvoidse Stringto Stringobject Stringconten MimeMessagem mailSe

1.为什么要写这一篇呢?

在做一个邮件发送功能的时候,需要发送html邮件,javaMail 发送html 的时候需要有已经生成的html正文,所以需要提前将要发送的内容生成,所以就需要模板引擎来动态填充数据。

public voidsendHtmlEmail(String to, String object, String content) {

MimeMessage message= mailSender.createMimeMessage();//创建一个MINE消息

try{//true表示需要创建一个multipart message

MimeMessageHelper helper = new MimeMessageHelper(message, true);

helper.setFrom(from);

helper.setTo(to);

helper.setSubject(object);

helper.setText(content,true);

mailSender.send(message);

log.info(“html邮件发送成功”);

}catch(MessagingException e) {

log.error(“发送html邮件时发生异常!”, e);

}

}

2.引入依赖

org.springframework.boot

spring-boot-starter-thymeleaf

ognl 的jar包可能并不需要,在生成过程中报classNotFound ,应该是和我的项目结构有关系,这个包根据实际情况来使用

ognl

ognl

3.2

3.代码

(1)首先准备一个html模板,需要替换的内容使用themleaf的th表达式来占位。我的工程是springboot 项目,文件位置放在resources/templates,也就是classpath:templates/

Title

td{width:80px;height:25px;align-content:center;

}

亲爱的,您月份的工资如下:

2.配置模板引擎

@Configurationpublic classMailConfig {

@Bean(“myTemplateEngine”)publicTemplateEngine templateEngine(){

ClassLoaderTemplateResolver resolver= newClassLoaderTemplateResolver();

resolver.setPrefix(“templates/”);

resolver.setSuffix(“.html”);

TemplateEngine engine= newTemplateEngine();

engine.setTemplateResolver(resolver);returnengine;

}

}

为手动生成html文件单独定义一个模板引擎,其他的使用默认配置。其中制定了模板文件的位置及后缀名,这个配置和application.properties 中配置是一样的

3.生成html

@PostMapping(“/sendEmail”)

@ResponseBodypublic AjaxResult sendEmail(Integer id) throwsIOException {

List componentVos =salaryCompnentService.selectComponentSum(id);

List th =Lists.newArrayList();

List tb =Lists.newArrayList();for (int i = 0; i < componentVos.size(); i++) {

ComponentVo vo=componentVos.get(i);

th.add(i, vo.getName());

tb.add(i, vo.getAmount());

}

SalaryCalculateVo salaryCalculate=salaryService.selectSalaryById(id);

Context context= newContext();

context.setVariable(“name”, salaryCalculate.getEmpName());

context.setVariable(“month”, salaryCalculate.getWorkMonth());

context.setVariable(“th”, th);

context.setVariable(“tb”, tb);

String res= engine.process(“mailTeamlate”, context);

salaryService.sendEmail(id,res, salaryCalculate.getWorkMonth()+ “工资条”, salaryCalculate.getEmail());return toAjax(1);

}

由于是测试功能,没有在代码结构上下功夫,随便写一下。主要的代码是王模板上下文Context中填充参数,engine.process()有很多重载的方法,主要有两类,一类是直接输出内容,一类是将文件输出到指定文件里。String template 这个参数指的是模板的名称。比如我的叫mailTeamlate,解析的时候模板引擎会找classpath:templates/mailTeamlate.html 这个文件。

public finalString process(String template, IContext context) {return this.process(new TemplateSpec(template, (Set)null, (TemplateMode)null, (String)null, (Map)null), context);

}

public final voidprocess(String template, IContext context, Writer writer) {this.process(new TemplateSpec(template, (Set)null, (TemplateMode)null, (String)null, (Map)null), context, writer);

}

4.效果

具体的文件内容就不说了,直接看我放到邮件的里面正文里的html样式

2fdb1b88d2b87bd4fcde1ff3ab005923.png

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/226378.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月16日 下午11:02
下一篇 2026年3月16日 下午11:03


相关推荐

  • html中超链接打电话怎么写,html超链接代码书写格式

    html中超链接打电话怎么写,html超链接代码书写格式几乎我们所有浏览的网页 或多或少都存在一些超链接 点击超链接就可以从一个页面跳转到另一个页面 超链接使得网络中 无数的网页能够彼此相互连接 方便网页浏览者进入到另一个相关的页面 html 超链接作用 HTML 超链接可以是任意某个字 词 或者某一个词组 也可以是一句话 一段文字 任意图片也可以成为超链接 你可以点击这些带有超链接功能的元素内容 就可以跳转到超链接指向的目标地址 这个目标地址可以是一个任意

    2026年1月17日
    2
  • 科大讯飞:星火X1.5提升训练与推理效率,多能力对标国际主流

    科大讯飞:星火X1.5提升训练与推理效率,多能力对标国际主流

    2026年3月14日
    2
  • phpstrom2021激活码【注册码】

    phpstrom2021激活码【注册码】,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月18日
    44
  • Origin简单绘图

    Origin简单绘图一、从cadence导出数据仿真生成波形之之后,鼠标选中波形,右击—>SendTo—>Export,进行csv数据的保存。打开该csv文件,删掉第一行,第一行是是横纵坐标的标识,左侧第一列是横坐标值,右侧列是纵坐标值。二、origin简单绘图双击图标打开origin导入csv数据可选中多个csv文件导入为了让两个csv的数据同时显示,在弹出的对话框进行以下操作(默认第二个csv数据会覆盖第一个csv数据)。设置好之后点击“确定”,两个csv数据均被导入到了o

    2022年6月1日
    40
  • 【Linux】文本编辑器Vim[通俗易懂]

    【Linux】文本编辑器Vim[通俗易懂]Linux文本编辑器Vim详细学习笔记

    2022年7月26日
    8
  • 摩尔斯电码对应表

    摩尔斯电码对应表对应字母和数字如下 数字对应中文 零壹贰叁肆伍陆柒捌玖

    2026年3月17日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号