thymeleaf介绍
简单说, Thymeleaf 是一个跟 Velocity、FreeMarker 类似的模板引擎,它可以完全替代 JSP 。相较与其他的模板引擎,它有如下三个极吸引人的特点:
1.Thymeleaf 在有网络和无网络的环境下皆可运行,即它可以让美工在浏览器查看页面的静态效果,也可以让程序员在服务器查看带数据的动态页面效果。这是由于它支持 html 原型,然后在 html 标签里增加额外的属性来达到模板+数据的展示方式。浏览器解释 html 时会忽略未定义的标签属性,所以 thymeleaf 的模板可以静态地运行;当有数据返回到页面时,Thymeleaf 标签会动态地替换掉静态内容,使页面动态显示。
2.Thymeleaf 开箱即用的特性。它提供标准和spring标准两种方言,可以直接套用模板实现JSTL、 OGNL表达式效果,避免每天套模板、该jstl、改标签的困扰。同时开发人员也可以扩展和创建自定义的方言。
3.Thymeleaf 提供spring标准方言和一个与 SpringMVC 完美集成的可选模块,可以快速的实现表单绑定、属性编辑器、国际化等功能。
form方式上传:
//html: <form enctype="multipart/form-data" method="post" action="/sell/imageUpload"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal" aria-hidden="true"> </button> <h4 class="modal-title" id="myModalLabel">Edit goods information</h4> </div> <div class="modal-body"> <div class="input-group"> <label class="col-lg-4">name:</label> <input class="col-lg-8" id="edit_name" value="${goods.name}" name="name"/> </div> <div class="input-group"> <label class="col-lg-4">code:</label> <input class="col-lg-8" id="edit_sn" name="sn" value="${goods.sn}" /> </div> <div class="input-group"> <label class="col-lg-4">weight:</label> <input class="col-lg-8" id="edit_weight" name="weight" value="${goods.weight}" /> </div> <div class="input-group"> <label class="col-lg-4">marketPrice:</label> <input class="col-lg-8" id="edit_marketPrice" name="marketPrice" value="${goods.marketPrice}" /> </div> <div class="input-group"> <label class="col-lg-4">shopPrice:</label> <input class="col-lg-8" id="edit_shopPrice" name="shopPrice" value="${goods.shopPrice}" /> </div> <div class="input-group"> <label class="col-lg-4">unit:</label> <input class="col-lg-8" id="edit_unit" name="unit" value="${goods.unit}" /> </div> <div class="input-group"> <label class="col-lg-4">number:</label> <input class="col-lg-8" id="edit_number" name="number" value="${goods.number}" /> </div> <div class="input-group"> <label class="col-lg-4">detail:</label> <textarea class="col-lg-8" id="edit_detail" name="detail" value="${goods.detail}" /> </div> <div class="input-group"> <!--<form enctype="multipart/form-data" method="post" action="/sell/imageUpload"> <input ype="hidden" id="edit_goods_sn" name="sn" value="${goods.sn}" />--> image<input type="file" id="edit_image" name="file"/> <input type="submit" value="upload"/> <!--</form>--> </div> </div> <div class="modal-footer"> <button type="button" class="btn btn-default" data-dismiss="modal">close</button> <input type="submit" class="btn btn-primary" id="edit_save" value="submit">提交更改</input> </div> </form> //controller @RequestMapping(value = "/save",method = RequestMethod.POST) public String saveGoodsPage(@RequestParam(value = "id",required=false) String id,@RequestParam(value = "name",required=false) String name,@RequestParam(value = "sn",required=false) String sn, @RequestParam(value = "number",required=false) String number,@RequestParam(value = "weight",required=false) String weight, @RequestParam(value = "marketPrice",required=false) String marketPrice,@RequestParam(value = "shopPrice",required=false) String shopPrice, @RequestParam(value = "unit",required=false) String unit, @RequestParam(value = "detail",required=false) String detail,@RequestParam (value="file")MultipartFile file ) { if (!file.isEmpty()) { try { BufferedOutputStream out = new BufferedOutputStream( new FileOutputStream(new File("src/main/resources/static/images/product/" + sn + ".jpg")));//保存图片到目录下 out.write(file.getBytes()); out.flush(); out.close(); String filename = "\\/images\\/product\\/" + sn + ".jpg"; /*user.setTupian(filename); //userRepository.save(user);//增加用户*/ } catch (FileNotFoundException e) { e.printStackTrace(); return "upload error," + e.getMessage(); } catch (IOException e) { e.printStackTrace(); return "upload error" + e.getMessage(); } } //...其他操作 }
补充:变量表达式和星号表达有什么区别吗?
如果不考虑上下文的情况下,两者没有区别;星号语法评估在选定对象上表达,而不是整个上下文什么是选定对象?就是父标签的值,如下:
<div th:object="${session.user}"> <p>Name: <span th:text="*{firstName}">Sebastian</span>.</p> <p>Surname: <span th:text="*{lastName}">Pepper</span>.</p> <p>Nationality: <span th:text="*{nationality}">Saturn</span>.</p> </div>
这是完全等价于:
<div th:object="${session.user}"> <p>Name: <span th:text="${session.user.firstName}">Sebastian</span>.</p> <p>Surname: <span th:text="${session.user.lastName}">Pepper</span>.</p> <p>Nationality: <span th:text="${session.user.nationality}">Saturn</span>.</p> </div>
当然,美元符号和星号语法可以混合使用:
<div th:object="${session.user}"> <p>Name: <span th:text="*{firstName}">Sebastian</span>.</p> <p>Surname: <span th:text="${session.user.lastName}">Pepper</span>.</p> <p>Nationality: <span th:text="*{nationality}">Saturn</span>.</p> </div>
总结
以上所述是小编给大家介绍的spring boot thymeleaf 图片上传web项目根目录操作步骤,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对小牛知识库网站的支持!
本文向大家介绍vue项目实现图片上传功能,包括了vue项目实现图片上传功能的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了vue实现图片上传功能的具体代码,供大家参考,具体内容如下 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。
问题内容: 当我上传新文件时,即使我指定了别的,它也会保存到应用程序的根文件夹中。为什么配置不起作用? : 问题答案: 是Flask可以识别的配置选项。相对于当前工作目录(通常是开发过程中的项目根目录)工作。 将安全的文件名加入上载文件夹,然后保存到该路径。 最好将本地数据存储在实例文件夹中,而不是项目根目录中。Flask已经知道那在哪里。只要确保你instance首先创建目录即可。 无论你决定将
基本设置 tag 信息:可自定义tag名称和tag描述,tag信息可用在接口tag标识中; mock 严格模式:开启后 mock 请求会对 query,body form 的必须字段和 json schema 进行校验; 开启json5:开启后允许接口请求body 和返回值中写 json 字段。yapi建议用户关闭 json5, 因为json-schema 格式可以进行接口格式校验。 新建项目 点
主要内容:显示所有的文件,实例,实例,实例,创建一个新目录,实例,删除目录,实例,切换目录,实例以下列出了一些操作目录的标准函数: 显示所有的文件 显示目录下的所有文件,以下实例使用了 glob 操作符,演示如下: 实例 #!/usr/bin/perl # 显示 /tmp 目录下的所有文件 $dir = "/tmp/*"; my @files = glob( $dir ); foreach (@files ){ print $_ . "\n"; } # 显示 /tmp 目录下所有以 .c 结
主要内容:DirectoryInfo 类,FileInfo 类前面我们介绍了 C# 中文件的读写操作,本节我们来看一下 C# 中有关目录的操作,C# 中允许您使用各种目录和文件相关的类来操作目录和文件,比如 DirectoryInfo 类和 FileInfo 类。 DirectoryInfo 类 DirectoryInfo 类派生自 FileSystemInfo 类,其中提供了各种用于创建、移动、浏览目录和子目录的方法。需要注意的是,该类不能被继承。 下表列
以下列出了一些操作目录的标准函数: opendir DIRHANDLE, EXPR # 打开目录 readdir DIRHANDLE # 读取目录 rewinddir DIRHANDLE # 定位指针到开头 telldir DIRHANDLE # 返回目录的当前位置 seekdir DIRHANDLE, POS # 定位指定到目录的 POS 位置 cl