版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第14章SpringBoot的Web开发学习目的与要求本章首先介绍Thymeleaf视图模板引擎技术,然后介绍如何使用Thymeleaf模板技术进行页面信息国际化,最后介绍Spring
Boot与Thymeleaf的表单验证。通过本章的学习,掌握SpringBoot的Web开发技术。《JavaWeb开发从入门到实战(微课视频版)(IntelliJIDEA版)》陈恒
主编,清华大学出版社,2024
目录14.1Thymeleaf模板引擎14.2SpringBoot与Thymeleaf实现页面信息国际化14.3SpringBoot与Thymeleaf的表单验证14.4基于Thymeleaf与BootStrap的Web开发实例《JavaWeb开发从入门到实战(微课视频版)(IntelliJIDEA版)》陈恒
主编,清华大学出版社,2024
14.1Thymeleaf模板引擎在SpringBoot的Web应用中,建议开发者使用HTML完成动态页面。SpringBoot提供了许多模板引擎,主要包括FreeMarker、Groovy、Thymeleaf和Mustache。因为Thymeleaf提供了完美的SpringMVC支持,所以在SpringBoot的Web应用中推荐使用Thymeleaf作为模板引擎。Thymeleaf是一个Java类库,是一个xml/xhtml/html5的模板引擎,能够处理HTML、XML、JavaScript以及CSS,可以作为MVC
Web应用的View层显示数据。《JavaWeb开发从入门到实战(微课视频版)(IntelliJIDEA版)》陈恒
主编,清华大学出版社,2024
14.1.1SpringBoot的Thymeleaf支持在SpringBoot1.X版本中,spring-boot-starter-thymeleaf依赖包含了spring-boot-starter-web模块。但是,在Spring5中,WebFlux的出现对于Web应用的解决方案将不再唯一。所以,spring-boot-starter-thymeleaf依赖不再包含spring-boot-starter-web模块,需要开发人员自己选择spring-boot-starter-thymeleaf模块依赖。《JavaWeb开发从入门到实战(微课视频版)(IntelliJIDEA版)》陈恒
主编,清华大学出版社,2024
14.1.2Thymeleaf基础语法1.引入Thymeleaf首先,将View层页面文件的html标签修改如下:<htmlxmlns:th="">然后,在View层页面文件的其它标签里,使用th:*动态处理页面。示例代码如下:<imgth:src="'images/'+${aBook.picture}"/>其中,${aBook.picture}获得数据对象aBook的picture属性。《JavaWeb开发从入门到实战(微课视频版)(IntelliJIDEA版)》陈恒
主编,清华大学出版社,2024
2.输出内容使用th:text和th:utext(不对文本转义,正常输出)将文本内容输出到所在标签的body中。假如在国际化资源文件messages_en_US.properties中有消息文本“test.myText=<strong>TestInternationalMessage</strong>”,那么在页面中可以使用如下两种方式获得消息文本:<pth:text="#{test.myText}"></p><!--对文本转义,即输出<strong>TestInternationalMessage</strong>--><pth:utext="#{test.myText}"></p><!--对文本不转义,即输出加粗的“TestInternationalMessage”-->《JavaWeb开发从入门到实战(微课视频版)(IntelliJIDEA版)》陈恒
主编,清华大学出版社,2024
3.基本表达式1)变量表达式:${...}用于访问容器上下文环境中的变量,示例代码如下:<spanth:text="${information}">2)选择变量表达式:*{...}选择变量表达式计算的是选定的对象(th:object属性绑定的对象),示例代码如下:<divth:object="${session.user}">name:<spanth:text="*{firstName}"></span><br><!--firstName为user对象的属性-->surname:<spanth:text="*{lastName}"></span><br>nationality:<spanth:text="*{nationality}"></span><br></div>3)信息表达式:#{...}一般用于显示页面静态文本。将可能需要根据需求而整体变动的静态文本放在properties文件中以便维护(如国际化)。通常与th:text属性一起使用,示例代码如下:<pth:text="#{test.myText}"></p>《JavaWeb开发从入门到实战(微课视频版)(IntelliJIDEA版)》陈恒
主编,清华大学出版社,2024
4.引入URLThymeleaf模板通过@{...}表达式引入URL,示例代码如下:<!--默认访问src/main/resources/static下的css文件夹--><linkrel="stylesheet"th:href="@{css/bootstrap.min.css}"/><!--访问相对路径--><ath:href="@{/}">去看看</a><!--访问绝对路径--><ath:href="@{/index.html(param1='传参')}">去清华大学出版社</a><!--默认访问src/main/resources/static下的'images文件夹--><imgth:src="'images/'+${aBook.picture}"/>《JavaWeb开发从入门到实战(微课视频版)(IntelliJIDEA版)》陈恒
主编,清华大学出版社,2024
5.访问WebContext对象中的属性Thymeleaf模板通过一些专门的表达式从模板的WebContext获取请求参数、请求、会话和应用程序中的属性,具体如下:${xxx}将返回存储在Thymeleaf模板上下文中的变量xxx或请求request作用域中的属性xxx。${param.xxx}将返回一个名为xxx的请求参数(可能是多个值)。${session.xxx}将返回一个名为xxx的HttpSession作用域中的属性。${application.xxx}将返回一个名为xxx的全局ServletContext上下文作用中的属性。与EL表达式一样,使用${xxx}获得变量值,使用${对象变量名.属性名}获取JavaBean属性值。但需要注意的是,${}表达式只能在th标签内部有效。《JavaWeb开发从入门到实战(微课视频版)(IntelliJIDEA版)》陈恒
主编,清华大学出版社,2024
6.运算符在Thymeleaf模板的表达式中可以使用+、-、*、/、%等各种算术运算符,也可以使用>、<、<=、>=、==、!=等各种逻辑运算符。示例代码如下:<trth:class="(${row}=='even')?'even':'odd'">...</tr>《JavaWeb开发从入门到实战(微课视频版)(IntelliJIDEA版)》陈恒
主编,清华大学出版社,2024
7.条件判断1)if和unless标签只有在th:if条件成立时才显示,th:unless与th:if相反,只有条件不成立时,才显示标签内容。示例代码如下:<ahref="success.html"th:if="${user!=null}">成功</a><ahref="success.html"th:unless="${user=null}">成功</a>2)switch语句Thymeleaf模板也支持多路选择switch语句结构,默认属性default可用“*”表示。示例代码如下:<divth:switch="${user.role}"><pth:case="'admin'">Userisanadministrator</p><pth:case="'teacher'">Userisateacher</p><pth:case="*">Userisastudent</p></div>《JavaWeb开发从入门到实战(微课视频版)(IntelliJIDEA版)》陈恒
主编,清华大学出版社,2024
8.循环(基本循环)Thymeleaf模板使用th:each="obj,iterStat:${objList}"标签进行迭代循环,迭代对象可以是java.util.List、java.util.Map或数组等。示例代码如下:<!--循环取出集合数据--><divclass="col-md-4col-sm-6"th:each="book:${books}"> <ahref="">
<imgth:src="'images/'+${book.picture}"alt="图书封面"style="height:180px;width:40%;"/> </a> <divclass="caption"> <h4th:text="${book.bname}"></h4> <pth:text="${book.author}"></p> <pth:text="${book.isbn}"></p> <pth:text="${book.price}"></p> <pth:text="${book.publishing}"></p> </div></div>《JavaWeb开发从入门到实战(微课视频版)(IntelliJIDEA版)》陈恒
主编,清华大学出版社,2024
8.循环(循环状态的使用)<divclass="col-md-4col-sm-6"th:each="book,bookStat:${books}"> <ahref=""> <imgth:src="'images/'+${book.picture}"alt="图书封面"style="height:180px;width:40%;"/> </a> <divclass="caption"> <!--循环状态bookStat--> <h3th:text="${bookStat.count}"></h3> <h4th:text="${book.bname}"></h4> <pth:text="${book.author}"></p> <pth:text="${book.isbn}"></p> <pth:text="${book.price}"></p> <pth:text="${book.publishing}"></p> </div></div>《JavaWeb开发从入门到实战(微课视频版)(IntelliJIDEA版)》陈恒
主编,清华大学出版社,2024
14.1.3Thymeleaf的常用属性1.th:action定义后台控制器路径,类似<form>标签的action属性。示例代码如下:<formth:action="@{/login}">...</form>2.th:each集合对象遍历,功能类似JSTL标签<c:forEach>。示例代码如下:<divclass="col-md-4col-sm-6"th:each="gtype:${gtypes}"> <divclass="caption"> <pth:text="${gtype.id}"></p> <pth:text="${gtype.typename}"></p> </div></div>《JavaWeb开发从入门到实战(微课视频版)(IntelliJIDEA版)》陈恒
主编,清华大学出版社,2024
14.1.3Thymeleaf的常用属性3.th:field常用于表单参数绑定,通常与th:object一起使用。示例代码如下:<formth:action="@{/login}"th:object="${user}"><inputtype="text"value=""th:field="*{username}"></input><inputtype="text"value=""th:field="*{role}"></input></form>4.th:href定义超链接,类似<a>标签的href属性。value形式为@{/logout},示例代码如下:<ath:href="@{/gogo}"></a>5.th:iddiv的id声明,类似html标签中的id属性,示例代码如下:<divth:id="stu+(${rowStat.index}+1)"></div>《JavaWeb开发从入门到实战(微课视频版)(IntelliJIDEA版)》陈恒
主编,清华大学出版社,2024
14.1.3Thymeleaf的常用属性6.th:if条件判断。如果为否则标签不显示,示例代码如下:<divth:if="${rowStat.index}==0">...dosomething...</div>7.th:fragment声明定义该属性的div为模板片段,常用于头文件、页尾文件的引入。常与th:include、th:replace一起使用。8.th:object用于表单数据对象绑定,将表单绑定到后台Controller的一个JavaBean参数,常与th:field一起使用,进行表单数据绑定。《JavaWeb开发从入门到实战(微课视频版)(IntelliJIDEA版)》陈恒
主编,清华大学出版社,2024
14.1.3Thymeleaf的常用属性【例14-1】表单提交及数据绑定的实现过程1)创建Web应用创建基于Lombok与Thymeleaf依赖的SpringBootWeb应用ch14_1,并在全局配置文件perties中,配置应用的上下文路径server.servlet.context-path=/ch14_1。《JavaWeb开发从入门到实战(微课视频版)(IntelliJIDEA版)》陈恒
主编,清华大学出版社,2024
2)创建实体类在Web应用ch14_1的src/main/java目录下,创建包com.ch7_1.model,并在该包中创建实体类LoginBean,代码如下:packagecom.ch7_1.model;importlombok.Data;@DatapublicclassLoginBean{Stringuname;Stringurole;}《JavaWeb开发从入门到实战(微课视频版)(IntelliJIDEA版)》陈恒
主编,清华大学出版社,2024
3)创建控制器类在Web应用ch14_1的src/main/java目录下,创建包com.ch14_1.controller,并在该包中创建控制器类LoginController。@GetMapping("/toLogin")publicStringtoLogin(Modelmodel){/*loginBean与login.html页面中的th:object="${loginBean}"相同,类似于SpringMVC的表单绑定。*/model.addAttribute("loginBean",newLoginBean());return"login";}@PostMapping("/login")publicStringgreetingSubmit(@ModelAttributeLoginBeanloginBean){/*@ModelAttributeLoginBeanloginBean接收login.html页面中的表单数据,并将loginBean对象保存到model中返回给result.html页面显示。*/System.out.println("测试提交的数据:"+loginBean.getUname());return"result";
}《JavaWeb开发从入门到实战(微课视频版)(IntelliJIDEA版)》陈恒
主编,清华大学出版社,2024
4)创建页面表示层Tymeleaf模板默认将视图页面放在src/main/resources/templates目录下。因此,在Web应用ch14_1的src/main/resources/templates目录下,创建页面login.html和result.html。《JavaWeb开发从入门到实战(微课视频版)(IntelliJIDEA版)》陈恒
主编,清华大学出版社,2024
5)运行首先,运行Ch141Application主类。然后,访问http://localhost:8080/ch14_1/toLogin,运行结果如图14.2所示。《JavaWeb开发从入门到实战(微课视频版)(IntelliJIDEA版)》陈恒
主编,清华大学出版社,2024
14.1.3Thymeleaf的常用属性9.th:src用于外部资源引入,类似于<script>标签的src属性。示例代码如下:<imgth:src="'images/'+${aBook.picture}"/>10.th:text文本显示,将文本内容显示到所在标签的body中。示例代码如下:<tdth:text="${username}"></td>11.th:value用于标签赋值,类似标签的value属性。示例代码如下:<optionth:value="Adult">Adult</option><inputtype="hidden"th:value="${msg}"
/>《JavaWeb开发从入门到实战(微课视频版)(IntelliJIDEA版)》陈恒
主编,清华大学出版社,2024
14.1.3Thymeleaf的常用属性12.th:style用于修改标签style,示例代码如下:<spanth:style="'display:'+@{(${myVar}?'none':'inline-block')}">myVar是一个变量</span>13.th:onclick用于修改点击事件,示例代码如下:<buttonth:onclick="'getCollect()'"></button>《JavaWeb开发从入门到实战(微课视频版)(IntelliJIDEA版)》陈恒
主编,清华大学出版社,2024
目录14.1Thymeleaf模板引擎14.2SpringBoot与Thymeleaf实现页面信息国际化14.3SpringBoot与Thymeleaf的表单验证14.4基于Thymeleaf与BootStrap的Web开发实例《JavaWeb开发从入门到实战(微课视频版)(IntelliJIDEA版)》陈恒
主编,清华大学出版社,2024
14.2SpringBoot与Thymeleaf实现页面信息国际化【例14-2】国际化的实现过程,具体实现步骤如下。1.编写国际化资源属性文件1)编写管理员模块的国际化信息在应用ch14_1的src/main/resources目录下创建i18n/admin文件夹,并在该文件夹下创建adminMperties、adminMessages_en_US.properties和adminMessages_zh_CN.properties资源属性文件。adminMperties表示默认加载的信息;adminMessages_en_US.properties表示英文信息(en代表语言代码,US代表国家地区);adminMessages_zh_CN.properties表示中文信息。《JavaWeb开发从入门到实战(微课视频版)(IntelliJIDEA版)》陈恒
主编,清华大学出版社,2024
1.编写国际化资源属性文件2)编写用户模块的国际化信息在应用ch14_1的src/main/resources目录下创建i18n/before文件夹,并在该文件夹下创建beforeMperties、beforeMessages_en_US.properties和beforeMessages_zh_CN.properties资源属性文件。3)编写公共模块的国际化信息在应用ch14_1的src/main/resources目录下创建i18n/common文件夹,并在该文件夹下创建commonMperties、commonMessages_en_US.properties和commonMessages_zh_CN.properties资源属性文件。《JavaWeb开发从入门到实战(微课视频版)(IntelliJIDEA版)》陈恒
主编,清华大学出版社,2024
2.添加配置文件内容,引入资源属性文件在应用ch14_1的配置文件perties中,添加如下内容,引入资源属性文件。spring.messages.basename=i18n/admin/adminMessages,i18n/before/beforeMessages,i18n/common/commonMessages《JavaWeb开发从入门到实战(微课视频版)(IntelliJIDEA版)》陈恒
主编,清华大学出版社,2024
3.重写localeResolver方法配置语言区域选择在应用ch14_1的com.ch14_1包中,创建配置类LocaleConfig,该配置类实现WebMvcConfigurer接口,并配置语言区域选择。@Configuration@EnableAutoConfigurationpublicclassLocaleConfigimplementsWebMvcConfigurer{ @Bean publicLocaleResolverlocaleResolver(){ } @Bean publicLocaleChangeInterceptorlocaleChangeInterceptor(){ } @Override publicvoidaddInterceptors(InterceptorRegistryregistry){ registry.addInterceptor(localeChangeInterceptor()); }
}《JavaWeb开发从入门到实战(微课视频版)(IntelliJIDEA版)》陈恒
主编,清华大学出版社,2024
4.创建控制器类I18nTestController在应用ch14_1的com.ch14_1.controller包中,创建控制器类I18nTestController。@Controller@RequestMapping("/i18n")publicclassI18nTestController{@GetMapping("/first")publicStringtestI18n(){return"/i18n/first";}@GetMapping("/admin")publicStringadmin(){return"/i18n/admin";}@GetMapping("/before")publicStringbefore(){return"/i18n/before";}}《JavaWeb开发从入门到实战(微课视频版)(IntelliJIDEA版)》陈恒
主编,清华大学出版社,2024
5.创建视图页面,并获得国际化信息在应用ch14_1的src/main/resources/templates目录下,创建文件夹i18n。并在该文件夹中创建admin.html、before.html和first.html视图页面,并在这些视图页面中使用th:text="#{xxx}"获得国际化信息。《JavaWeb开发从入门到实战(微课视频版)(IntelliJIDEA版)》陈恒
主编,清华大学出版社,2024
6.运行《JavaWeb开发从入门到实战(微课视频版)(IntelliJIDEA版)》陈恒
主编,清华大学出版社,2024
目录14.1Thymeleaf模板引擎14.2SpringBoot与Thymeleaf实现页面信息国际化14.3SpringBoot与Thymeleaf的表单验证14.4基于Thymeleaf与BootStrap的Web开发实例《JavaWeb开发从入门到实战(微课视频版)(IntelliJIDEA版)》陈恒
主编,清华大学出版社,2024
14.3SpringBoot与Thymeleaf的表单验证本节使用Hibernate
Validator对表单进行验证,注意它和Hibernate无关,只是使用它进行数据验证。因为spring-boot-starter-web不再依赖hibernate-validator的jar包,所以在Spring
Boot的Web应用中,使用Hibernate
Validator对表单进行验证时,需要加载Hibernate
Validator所依赖的jar包。<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId></dependency>使用Hibernate
Validator验证表单时,需要利用它的标注类型在实体模型的属性上嵌入约束。《JavaWeb开发从入门到实战(微课视频版)(IntelliJIDEA版)》陈恒
主编,清华大学出版社,2024
HibernateValidator标注类型1.空检查@Null:验证对象是否为null。@NotNull:验证对象是否不为null,无法查检长度为0的字符串。@NotBlank:检查约束字符串是不是null,还有被trim后的长度是否大于0,只对字符串,且会去掉前后空格。@NotEmpty:检查约束元素是否为null或者是empty。示例如下:@NotBlank(message="{goods.gname.required}")//goods.gname.required为属性文件的错误代码privateStringgname;《JavaWeb开发从入门到实战(微课视频版)(IntelliJIDEA版)》陈恒
主编,清华大学出版社,2024
HibernateValidator标注类型2.booelan检查@AssertTrue:验证boolean属性是否为true。@AssertFalse:验证boolean属性是否为false。示例如下:@AssertTrueprivatebooleanisLogin;3.长度检查@Size(min=,max=):验证对象(Array,Collection,Map,String)长度是否在给定的范围之内。@Length(min=,max=):验证字符串长度是否在给定的范围之内。示例如下:@Length(min=1,max=100)privateStringgdescription;《JavaWeb开发从入门到实战(微课视频版)(IntelliJIDEA版)》陈恒
主编,清华大学出版社,2024
HibernateValidator标注类型4.日期检查@Past:验证Date和Calendar对象是否在当前时间之前。@Future:验证Date和Calendar对象是否在当前时间之后。@Pattern:验证String对象是否符合正则表达式的规则。示例如下:@Past(message="{gdate.invalid}")privateDategdate;《JavaWeb开发从入门到实战(微课视频版)(IntelliJIDEA版)》陈恒
主编,清华大学出版社,2024
HibernateValidator标注类型5.数值检查@Min:验证Number和String对象是否大等于指定的值。@Max:验证Number和String对象是否小等于指定的值。@DecimalMax:被标注的值必须不大于约束中指定的最大值,这个约束的参数是一个通过BigDecimal定义的最大值的字符串表示,小数存在精度。@DecimalMin:被标注的值必须不小于约束中指定的最小值,这个约束的参数是一个通过BigDecimal定义的最小值的字符串表示,小数存在精度。@Digits:验证Number和String的构成是否合法。@Digits(integer=,fraction=):验证字符串是否符合指定格式的数字,interger指定整数精度,fraction指定小数精度。@Range(min=,max=):检查数字是否介于min和max之间。@Valid:对关联对象进行校验,如果关联对象是个集合或者数组,那么对其中的元素进行校验,如果是一个map,则对其中的值部分进行校验。@CreditCardNumber:信用卡验证。@Email:验证是否是邮件地址,如果为null,不进行验证,通过验证。@Range(min=0,max=100,message="{gprice.invalid}")privatedoublegprice;《JavaWeb开发从入门到实战(微课视频版)(IntelliJIDEA版)》陈恒
主编,清华大学出版社,2024
14.3SpringBoot与Thymeleaf的表单验证【例14-3】使用Hibernate
Validator验证表单的过程。1.创建Web应用创建基于Lombok与Thymeleaf依赖的SpringBootWeb应用ch14_2,并在全局配置文件perties中,配置应用的上下文路径server.servlet.context-path=/ch14_2。2.加载HibernateValidator依赖在应用ch14_2的pom.xml文件中添加Hibernate
Validator所依赖的JAR包。《JavaWeb开发从入门到实战(微课视频版)(IntelliJIDEA版)》陈恒
主编,清华大学出版社,2024
3.创建表单实体模型在应用ch14_2的src/main/java目录下,创建com.ch14_2.model包,并在该包中创建表单实体模型类Goods。在该类使用HibernateValidator的标注类型进行表单验证。@DatapublicclassGoods{@NotBlank(message="商品名必须输入")
@Length(min=1,max=5,message="商品名长度在1到5之间")privateStringgname;@Range(min=0,max=100,message="商品价格在0到100之间")privatedoublegprice;}《JavaWeb开发从入门到实战(微课视频版)(IntelliJIDEA版)》陈恒
主编,清华大学出版社,2024
4.创建控制器在应用ch14_2的src/main/java目录下,创建com.ch14_2.controller包,并在该包中创建控制器类TestValidatorController。在该类中有两个处理方法,一个是界面初始化处理方法testValidator,一个是添加请求处理方法add。在add方法中,使用@Validated注解使验证生效。@PostMapping("/add")publicStringadd(@ModelAttribute("goodsInfo")@ValidatedGoodsgoods,BindingResultrs){
//@ModelAttribute("goodsInfo")与th:object="${goodsInfo}"相对应
if(rs.hasErrors()){//验证失败
return"testValidator";
}
//验证成功,可以到任意地方,在这里直接到testValidator界面
return"testValidator";}《JavaWeb开发从入门到实战(微课视频版)(IntelliJIDEA版)》陈恒
主编,清华大学出版社,2024
5.创建视图页面在应用ch14_2的src/main/resources/templates目录下,创建视图页面testValidator.html。在视图页面中,直接读取到ModelAttribute里面注入的数据,然后通过th:errors="*{xxx}"获得验证错误信息。《JavaWeb开发从入门到实战(微课视频版)(IntelliJIDEA版)》陈恒
主编,清华大学出版社,2024
6.运行首先,运行Ch142Application主类。然后,访问http://localhost:8080/ch14_2/testValidator。表单验证失败效果如图14.6所示。《JavaWeb开发从入门到实战(微课视频版)(IntelliJIDEA版)》陈恒
主编,清华大学出版社,2024
目录14.1Thymeleaf模板引擎14.2SpringBoot与Thymeleaf实现页面信息国际化14.3SpringBoot与Thymeleaf的表单验证14.4基于Thymele
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025版建筑工程项目变更管理合同范本3篇
- 2025版节能纱窗定制采购与节能认证合同3篇
- 2025年度家政服务公司兼职家政人员服务合同3篇
- 2025版股权转让及业绩对赌合同模板3篇
- 2025版工业用地场地租赁及配套设施建设合同2篇
- 2025版装配式建筑房屋建设质量保修合同3篇
- 2025版建筑工地材料采购合同范本(含合同生效条件)2篇
- 2025年度人工智能技术服务合同694262篇
- 2025版钢材行业技术合作合同范本深度解读3篇
- 柴油居间合同协议书范本2025年
- 心理危机干预服务
- 天津市河北区2023年七年级上册《生物》期末试卷与参考答案
- 江苏省徐州市重点中学高三第四次模拟考试新高考英语试卷及答案解析
- 广西壮族自治区桂林市2023-2024学年七年级下学期期末考试数学试题
- 2024年二级建造师继续教育题库及答案(500题)
- 2024国家安全员资格考试题库(含答案)
- 《航空工程材料》教学大纲
- 物联网综合测试题和答案全
- MOOC 制造技术基础训练-北京理工大学 中国大学慕课答案
- MOOC 英语话中华-山东大学 中国大学慕课答案
- 生物化学(华南农业大学)智慧树知到期末考试答案2024年
评论
0/150
提交评论