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

Spring企业级程序设计 • 【第6章 深入Spring MVC开发】

全部章节   >>>>


本章目录

6.1 模型数据解析及控制器返回值

6.1.1 ModelAndView多种用法

6.1.2  Map添加模型数据和返回String类型值

6.1.3  Model添加模型数据和返回String类型值

6.1.4 返回值为String类型的重定向和转发

6.1.5 实践练习

6.2 Spring MVC表单标签库

6.2.1  form表单与模型数据的绑定

6.2.2  Spring MVC常用标签

6.2.3 实践练习

6.3  Spring MVC数据校验

6.3.1 基于Validator接口方式的数据验证

6.3.2 基于Annotaion JSR-303标准的数据校验

6.3.3 实践练习

6.4综合案例

6.4.1 在Spring MVC中使用RESTful架构

6.4.2 课程管理模块需求说明

6.4.2 课程管理模块实现思路

6.4.3 实践练习

总结:


6.1 模型数据解析及控制器返回值

Spring MVC框架作为一个MVC框架,很重要的一项工作是控制器获取模型数据并返回给客户端,即在JSP页面展示模型数据。

模型数据的绑定,是指将模型数据绑定给JSP域对象。模型数据的绑定是由视图解析器来完成的,开发时先添加模型数据,再交给视图解析器来绑定。

Spring MVC提供了Map、Model和ModelAndView等方式添加模型数据,而控制器的返回值有ModelAndView、String和void。

配置视图解析器,简化转向地址的编写。在Spring MVC的核心配置文件中,配置视图解析器。

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/jsp"></property><property name="suffix" value=".jsp"></property>
</bean>

6.1.1 ModelAndView多种用法

示例:模型数据解析及控制器返回值的多种用法。

配置视图解析器后,转向地址简化了,前缀和后缀都不用写了

	@RequestMapping("/modelAndViewTest1")public ModelAndView modelAndViewTest1(){ModelAndView modelAndView = new ModelAndView();modelAndView.addObject("name", "大哥");modelAndView.setViewName("index");return modelAndView;}@RequestMapping("/modelAndViewTest2")public ModelAndView modelAndViewTest2(){ModelAndView modelAndView = new ModelAndView();modelAndView.addObject("name", "二哥");View view = new InternalResourceView("/WEB-INF/jsp/index.jsp");modelAndView.setView(view);return modelAndView;}
	@RequestMapping("/modelAndViewTest3")public ModelAndView modelAndViewTest3(){ModelAndView modelAndView = new ModelAndView("index");modelAndView.addObject("name", "三哥");return modelAndView;}@RequestMapping("/modelAndViewTest4")public ModelAndView modelAndViewTest4(){ModelAndView modelAndView = new ModelAndView("index","name", "四哥");return modelAndView;}

6.1.2  Map添加模型数据和返回String类型值

Spring MVC在内部使用Model接口存储模型数据,在调用业务方法前会创建一个隐含对象作为模型数据的存储容器。

设置业务方法的入参为Map类型,Spring MVC会将隐含对象的引用传递给入参。

在方法体中,开发者可以通过入参对象访问到模型中的所有数据,也可以向模型中添加新数据。即只需要在业务方法添加Map类型的入参,方法体中便可通过对入参的操作来完成模型数据的添加。

示例: 使用Map类型的入参来完成模型数据的添加,并且返回String类型值

@Controller
public class MapController {@RequestMapping("/mapTest")public String mapTest(Map<String, String> map){map.put("name", "小王");return "index";}
}

配置视图解析器后,转向地址简化了,前缀和后缀都不用写了

6.1.3  Model添加模型数据和返回String类型值

示例:使用Model类型的入参完成模型数据的添加,并且返回String类型值

@Controller
public class ModelController {@RequestMapping("/modelTest")public String modelTest(Model model){model.addAttribute("name", "小章");return "index";}
}

6.1.4 返回值为String类型的重定向和转发

示例:返回值为String类型时,重定向和转发的跳转的实现。

	@RequestMapping("/forward")// 转发跳转到商品列表页面public String forwardTest(){return "forward:/jump.do";}@RequestMapping("/redirect")// 重定向跳转到商品列表页面public String redirectTest(){return "redirect:/jump.do";}

6.1.5 实践练习

 

6.2 Spring MVC表单标签库

 表单标签库的实现类在spring-webmvc.jar文件当中,标签库描述文件是spring-form.tld。要使用Spring MVC的表单标签库,必须在JSP页面的开头处声明一下taglib指令。

<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>

标签

描述

Form

渲染表单元素

input

渲染<input type=”text” />元素

password

渲染<input type=”password” />表单元素

hidden

渲染<input type=”hidden” />元素

textarea

渲染textarea元素

Checkbox

渲染一个<input type=”checkbox” />元素

Checkboxes

渲染多个<input type=”checkbox” />元素

Radiobutton

渲染一个<input type=”radio” />元素

Radiobuttons

渲染多个<input type=”radio” />元素

Select

渲染一个选择元素

Option

渲染一个可选元素

Options

渲染一个可选元素列表

errors

在span元素中渲染字段错误

6.2.1  form表单与模型数据的绑定

示例:完成Spring MVC表单与模型数据绑定。

<body><h1>修改学生信息</h1><form:form modelAttribute="student" action="modifyDo.do" method="post">学生姓名:<form:input path="stuName" /><br/>学生年龄:<form:input path="age" /><br/><input type="submit" value="提交"/></form:form>
</body>

<form:form></form:form>标签渲染的是HTML中的<form></form>,通过modelAttribute属性绑定具体的模型数据,<form:input />渲染的是HTML中的<input type="text"/>,form标签绑定的是模型数据,input标签绑定的就是模型数据中的属性值,通过path属性与模型数据的属性名对应。

6.2.2  Spring MVC常用标签

示例:首先在Student类中添加password、hobby、sex、city和introduce五个属性,然后在modifyStudent.jsp文件中添加标签内容,最后在页面输出修改后学生信息。

<form:form modelAttribute="student" action="modifyDo.do" method="post">// 原有代码省略学生密码:<form:password path="password" /><br/>学生爱好:<form:checkbox path="hobby" value="读书" />读书<form:checkbox path="hobby" value="看电影" />看电影…<br/>学生性别:<form:radiobutton path="sex" value="男" />男<form:radiobutton path="sex" value="女" />女<br/>城市:<form:select path="city"><form:option value="0">--请选择--</form:option><form:option value="北京">北京</form:option>…</form:select><br/>自我介绍:<form:textarea path="introduce"  /><input type="submit" value="提交"/>
</form:form>

6.2.3 实践练习

 

6.3  Spring MVC数据校验

数据校验就是用来验证客户输入的数据是否合法。数据校验分为客户端校验和服务端校验,Spring MVC提供的数据校验为服务端校验。

Spring MVC提供了两种数据校验的方式:基于Validator接口的方式和使用Annotaion JSR-303标准进行校验。

使用Spring MVC的数据校验需导入jar包

6.3.1 基于Validator接口方式的数据验证

示例:在学生登录界面,验证学生姓名和密码是否为空。

@RequestMapping("/login")// @Validated:对它注解的POJO进行校验// BindingResult:通过这个对象可以获取到校验失败额信息,// 它和@Validated注解必须配对使用,而且一前一后public String login(@Validated Student student, BindingResult rs){if(rs.hasErrors()){// 校验失败返回登录界面return "login";}// 校验成功返回首页return "success";}
public class StudentValidator implements Validator {@Overridepublic boolean supports(Class<?> clazz) {return Student.class.equals(clazz);}@Overridepublic void validate(Object target, Errors errors) {ValidationUtils.rejectIfEmpty(errors, "stuName", null, "学生用户名不能为空!");ValidationUtils.rejectIfEmpty(errors, "password", null, "学生密码不能为空!");}
}
	<!-- 配置自定义校验器 --><bean id="studentValidator" class="com.mhys.demo.validator.StudentValidator"></bean><!-- 开启注解驱动 --><mvc:annotation-driven validator="studentValidator"></mvc:annotation-driven>
<body><h1>学生登录</h1><form:form action="login.do" modelAttribute="student" method="post">学生用户名:<form:input path="stuName"/><form:errors path="stuName" /><br/><br/>学生密码:<form:input path="password"/><form:errors path="password" /><br/><br/><input type="submit" value="登 录" /></form:form>
</body>

6.3.2 基于Annotaion JSR-303标准的数据校验

使用Annotaion JSR-303标准则不需要自定义验证器,通过注解的方式可以直接在实体类中添加每个属性的校验规则,这种方式使用更加方便。

标签

描述

@Null

限制只能为null

@NotNull

限制必须不为null

@AssertFalse

限制只能为false

@AssertTrue

限制只能为true

@DecimalMax(value)

限制必须为一个不大于指定值得数字

@DecimalMin(value)

限制必须为一个不小于指定值得数字

@Max(value)

限制必须为一个不大于指定值的数字

@Min(value)

限制必须为一个不小于指定值的数字

@Pattern(value)

限制必须符合指定的正则表达式

@Size(max,min)

限制字符长度必须在min到max之间

@NotEmpty

验证注解的元素值不为null(字符串长度不为0、集合大小不为0)

@NotBlank

验证注解的元素值不为空(只用于字符串且在比较时会去除字符串的空格)

@Email

验证注解的元素值是Email,也可以通过正则表达式指定自定义的Email格式

示例:通过用户注册功能,使用注解的方式,完成用户实体类属性的校验。

public class User {@NotEmpty(message="用户名不能为空!")private String username;@Size(min=6,max=12,message="密码长度为6到12位!")private String password;@Email(regexp = "^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+(\\.[a-zA-Z0-9-]+)*\\.[a-zA-Z0-9]{2,6}$",message = "请输入正确的邮箱格式")private String email;@Pattern(regexp = "^((13[0-9])|(14[5|7])|(15([0-3]|[5-9]))|(18[0,5-9]))\\d{8}$",message="请输入正确的电话格式")// set()方法和get()方法省略
}
	@RequestMapping("/registerDo")public String registerDo(@Valid User user, BindingResult br){if(br.hasErrors()){return "register";}return "registerSuccess";}
<form:form action="registerDo.do" modelAttribute="user" method="post">用户名:<form:input path="username"/><form:errors path="username" cssClass="error" /><br/><br/>用户密码:<form:password path="password"/><form:errors path="password" cssClass="error" /><br/><br/>用户邮箱:<form:input path="email"/><form:errors path="email" cssClass="error" /><br/><br/>用户电话:<form:input path="telphone"/><form:errors path="telphone" cssClass="error" /><br/><br/><input type="submit" value="注 册" /></form:form>

6.3.3 实践练习

 

6.4综合案例

6.4.1 在Spring MVC中使用RESTful架构

REST(RepresEntational State Transfer,(资源)表现层状态转化)是目前最流行的一种互联网软件架构,它结构清晰、符合标准、易于理解并且扩展方便,得到了越来越多网站的采用。特点如下:

url更加简洁,将参数通过url传到服务端。

  • 非REST的url为http://…/queryUserById?id=1。
  • REST的url风格为http://…/queryUserById/1 。

有利于不同系统之间的资源共享,只需要遵守规范,不需要做其他的配置就能达到资源共享。

示例:使用@PathVariable注解获取REST的url风格中的参数值。

@Controller
public class TestController {@RequestMapping("/test/{name}/{id}")@ResponseBodypublic String test(@PathVariable String name,@PathVariable String id){return "名字:" + name + " ----- 编号:" + id; }
}

6.4.2 课程管理模块需求说明

在课程管理系统中,课程管理模块主要负责管理所有的课程信息。主要功能包括添加、删除、修改和查找课程信息。根据本章所学知识,开发一个简单的课程管理模块,要求:

  • 完成课程列表展示。
  • 新增课程功能。
  • 删除课程功能。
  • 修改课程功能。

6.4.2 课程管理模块实现思路

创建t10_course表,添加courseId、courseName和coursePrice字段。

在springmvc.xml配置文件中开启注解扫描功能、配置数据源、配置JdbcTemplate模板、开启注解驱动和配置视图解析器,dataSource.properties配置文件中内容省略。

在com.mhys.demo.pojo包下创建T10_course类,添加courseId、courseName和coursePrice属性,添加注解和验证规则。

在com.mhys.demo.dao包下创建T10_courseDao接口,添加getT10_courseList()方法、addT10_course()方法和deleteT10_course()方法。

在com.mhys.demo.dao.impl包下创建T10_courseDaoImpl类并实现T10_courseDao接口,实现接口中的方法

在com.mhys.demo.service包下创建T10_courseService接口,添加getT10_courseList()方法、addT10_course()方法和deleteT10_course()方法。

在com.mhys.demo.service.impl包下创建T10_courseServiceImpl类并实现T10_courseService接口,实现接口中的方法。

在com.mhys.demo.controller包下创建T10_courseServiceController处理器类并注册到容器,声明getT10_courseList()方法、addT10_course()方法、addT10_courseDo()方法和deleteT10_courseDo()方法。

在WEB-INF/jsp目录下创建t10_course_list.jsp文件和addT10_course.jsp文件。

6.4.3 实践练习

 

总结:

Spring MVC提供了Map、Model和ModelAndView等方式添加模型数据,而控制器的返回值有ModelAndView、String和void。

Spring表单标签有 : <form:form>标签、<form:input>标签<form:password>标签、<form:chexkbox>标签、<form:radiobutton>标签、<form:select>标签、<form:option>标签、<form:textarea>标签和<form:hidden>标签等。

JSR常用注解:@Null注解、@NotNull注解、@DecimalMax(value)注解、@DecimalMin(value)注解、@Max(value)注解、@Min(value)注解、@Pattern(value)注解、@Size(max,min)注解、@NotEmpty注解以及@NotBlank注解等等。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.exyb.cn/news/show-2878.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

CentOS安装VirtuanBox

CentOS7安装virtualbox 1.进入virtualbox官网 https://www.virtualbox.org/ 2.点击download 3.点击Linux distributions 4.向下翻至如图&#xff0c;并且进入同种框选页面 5.在/etc/yum.repos.d/目录下新建virtualbox.repo并写入如下内容 [virtualbox] nameOracle Linux / R…...

模拟实现堆栈将中缀算术表达式转换成后缀表达式

1、随机生成100个0到200的整数 用折半查找法&#xff08;二分法&#xff09;查找50是初始数据的第几个数&#xff0c; 并输出查找过程&#xff08;即和什么数进行了比较&#xff09;。 public class Random0To200 {public int random;public int num;public void display(){Sy…...

自适应平台AUTOSAR(Adaptive Platform AUTOSAR)平台设计(6)——通信管理

参考&#xff1a; https://zhuanlan.zhihu.com/p/336833453 1.概述 通信管理负责分布式实时嵌入式环境中应用程序之间的所有通信。 背后的概念是从实际机制中抽象出来&#xff0c;以查找和连接通信伙伴&#xff0c;以便应用程序软件的实现者可以专注于其应用程序的特定目的。…...

飞塔防火墙MIB-OID列表

找了很久,终于找到了官方的文档,包含了很多东西,贴个目录吧,获取资源请见最底部链接。 介绍: FortiGate是全新的下一代防火墙,在整个硬件架构和系统上面都有新的设计,在性能和功能上面都有了很大提升,具有性能高、接口丰富、功能齐全、安全路由交换一体化、性价比高等…...

中国石油大学《混凝土》第三阶段在线作业

第三阶段在线作业单选题 (共24道题) 收起1.&#xff08;2.5分&#xff09; 混凝土构件的平均裂缝间距与下列因素无关的是 A、混凝土强度等级 B、混凝土保护层厚度 C、纵向受拉钢筋直径 D、纵向钢筋配筋率我的答案&#xff1a;A 此题得分&#xff1a;2.5分2.&#xff08;…...

CSS 透明,文字不透明处理

1.opacity&#xff1a;会使其所有子元素都透明 我们通常是使用 opacity来做背景的透明化处理&#xff0c;该属性被所有浏览器支持&#xff0c;可以大胆使用&#xff0c;透明度从0.0(完全透明)到1.0(完全不透明)&#xff0c;但该方法会使其所有子元素都透明&#xff0c;此时若只…...

HTML基础知识

HTLM基础知识 语义化 每一个HTML元素都有具体的含义所有元素与展示效果无关,元素展示的效果应该由CSS决定浏览器带有默认的CSS样式,所以每个元素都有一些默认的样式选择什么元素,取决于内容的含义,而不是显示出的效果为什么需要语义化? 5.1 为了搜索引擎优化(SEO),每隔一段时…...

记录一个docker容器内网络与主机不通的问题(桥接网络不通)

https://blog.csdn.net/weixin_33102135/article/details/111946436 测试docker已经部署上的流程&#xff1a; 进入容器内部执行&#xff0c;脚本。执行成功。 外网telnet连接显示连接不到端口。 在其他机器上部署该docker服务&#xff0c;docker-compse方式&#xff0c;可…...

Hudi 系列(二)- 编译 hudi

编译 hudi 如果是第一次编译 hudi 会花很长时间&#xff0c;maven 本地仓库为空的情况下&#xff0c;我花了40分钟&#xff08;视网络环境&#xff09;。编译步骤如下&#xff1a; 下载 releace 源代码&#xff0c;https://hudi.apache.org/releases&#xff0c;现在的最新版本…...

MapReduce概述

1.MapReduce定义 MapReduce是一个分布式运算程序的编程框架&#xff0c;是用户开发“基于Hadoop的数据分析应用”的核心框架。 MapReduce核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序&#xff0c;并行运行在一个Hadoop集群上。 2.MapReduc…...

vsftpd2.3.4著名笑脸漏洞复现实战

1.vsftpd手工利用 攻击机kali&#xff1a;192.168.182.133 靶机metasploit&#xff1a;192.168.182.128 先ping一下靶机看看靶机是否存活 接着使用nmap对靶机进行信息收集 这里可以看到版本是vsftpd2.3.4 漏洞是存在的 直接ftp连接靶机 用户名&#xff1a;user:) 密码随意…...

赶紧收藏!javasocket聊天室和私聊

前言 这些算法&#xff0c;都是小编一点一点看的大佬们的方法&#xff0c;自己积累的. 如果有什么描述的不对的地方还望大佬赐教 多交流才能进步&#xff0c;加油&#xff0c;冲冲冲&#xff01;&#xff01;&#xff01; RPC概述 RPC(Remote Procedure Call)即远程过程调用&a…...

洛谷:P1831 杠杆数(数位dp)

文章目录描述解析代码thanks for reading&#xff01;传送门描述 如果把一个数的某一位当成支点&#xff0c;且左边的数字到这个点的力矩和等于右边的数字到这个点的力矩和&#xff0c;那么这个数就可以被叫成杠杆数。 比如4139就是杠杆数&#xff0c;把3当成支点&#xff0c…...

<form>标签

HTML-表单 1. 在HTML标签中,<form>标签用来定义表单&#xff0c;来实现用户信息的收集和传递。 <form action"url地址" method"提交的方式" name"表单的名称"></form> 比较get和post&#xff1a; 2. 表单能够包含 input 元…...

.NET 6程序部署到Docker

使用Docker部署应用程序 首先确保已经安装Docker 桌面软件&#xff0c;如下图&#xff1a; 然后&#xff0c;把需要部署到Docker上面的项目&#xff0c;咱们先添加Docker的支持&#xff0c;启动项目右键 -> 添加 -> Docker支持&#xff0c;选择 Linux 然后会自动生成Doc…...

如何抓取modem开机log

1. adb root 2. adb shell cat /sys/bus/msm_subsys/devices/subsys*/name 3. 根据2输出的结果从上往下数&#xff0c;从0开始数&#xff0c;数到modem是数字几&#xff0c;那么*号就用几来替代&#xff0c;比如数到moddem是3&#xff0c;那么modem对应的子系统就是subsys3 4…...

HTML5详解 (前端)

什么是HTML 超文本标记语言 Hyper Text Markup Language W3C 万维网联盟 标准包括&#xff1a; 结构化标准语言&#xff08;HTML、XML&#xff09;表现标准语言&#xff08;CSS&#xff09;和行为标准&#xff08;DOM、ECMAScript&#xff09; 新建project HTML 删除SRC文件…...

我们究竟还要学习哪些Android知识?赶紧收藏!

前言 今年是转折的一年&#xff0c;很多学android开发的小伙伴失业了&#xff0c;虽找到了一份工作&#xff0c;但高不成低不就&#xff0c;下半年金九银十有想法更换一份工作&#xff0c;很多需要大厂面试经验和大厂面试真题的小伙伴&#xff0c;想提前准备刷下题。接下来分享…...

VR垃圾分类_VR环保科普_VR垃圾分类综合解决方案

随着人类生活质量水平的提高&#xff0c;人类生存的环境在不可逆转的变化&#xff0c;自然保护和生态安全越来越引人注目。全球气候变暖、自然灾害频繁&#xff0c;使得保护生态环境迫在眉睫。聚象科技VR环保模拟系统&#xff0c;使体验者“进入”生态环境&#xff0c;身临其境…...

python的matplotlib的常用绘图函数模版

import matplotlib.pyplot as plt # from mpl_toolkits.mplot3d import Axes3D import matplotlib as mpl import numpy as np import pandas as pd import time plt.rcParams[font.sans-serif][simhei]#用于正常显示中文标签 plt.rcParams[axes.unicode_minus]False#用于正常显…...

投资理财1

1. 投资术语 熔断&#xff1a;也叫自动停盘机制&#xff0c;是指当股指波幅达到规定的熔断点时&#xff0c;交易所为控制风险采取的暂停交易措施。具体说是对某一合约在达到涨跌停板之前&#xff0c;设置一个熔断价格&#xff0c;使合约买卖报价在一段时间内只能在这一价格范围…...

CocosCreator开源框架(不断更新)

关于框架 最近项目里面需要搭建一个基础框架&#xff0c;所以我就参考了github&#xff0c;gitee上面的一些大佬的开源框架&#xff0c;这里也进行一个汇总&#xff0c;方便大家参考和学习。 关于编辑器版本&#xff0c;我觉得学习的时候不管是什么版本开发的框架&#xff0c…...

你不得不知道的36条社会潜规则(摘抄)

人过三十&#xff0c;你不得不知道的36条社会潜规则。   1、去别人家里串门记得一定要带点东西&#xff0c;即使你们关系再好&#xff0c;也要拿点礼品。   2、在别人面前一定要学会适当的装穷&#xff0c;即使你再有钱&#xff0c;也不要在朋友面前显摆。   3、警惕在你…...

macOS 使用技巧

快捷键 截图 获取文件地址 command option C 常用的系统快捷键 commandM:缩小窗口&#xff1b; commandW:关闭窗口&#xff1b; control单击&#xff1a;鼠标右键&#xff1b; command&#xff0b;H&#xff1a;隐藏窗口&#xff1b; commandQ:退出应用程序&#xff1…...

可持久化线段树 主席树 详解

&#x1f60a; | Powered By HeartFireY | Persistent Segment Tree &#x1f4d5; | 需要的前导知识&#xff1a;线段树(Segment Tree)、权值线段树、可持久化数据结构理论(Persistent Data Structure Theory) 一、可持久化线段树 简介 可持久化线段树&#xff0c;顾名思义…...

【每日一题】day29_01 正数数组的最小不可组成和

学习目标&#xff1a; 目标&#xff1a;熟练运用Java所学知识 学习内容&#xff1a; 本文内容&#xff1a;使用java解决 正数数组的最小不可组成和 文章目录学习目标&#xff1a;学习内容&#xff1a;题目描述解题思路&#xff1a;实现代码题目描述 链接&#xff1a;https:/…...

SpringBoot入门及官网教程

文章目录http://felord.cn/_doc/_springboot/2.1.5.RELEASE/_book/https://spring.io/projects/spring-boothttps://springboot.io/http://felord.cn/_doc/_springboot/2.1.5.RELEASE/_book/ https://spring.io/projects/spring-boot https://springboot.io/...

Python入门及官网教程

文章目录https://www.python.org/http://www.python-china.com/https://www.python.org/ http://www.python-china.com/...

源码部署pxc集群

想了想还是研究一下怎么源码安装pxc吧&#xff0c;毕竟很多组件都是源码安装的。 环境&#xff1a; yum install -y boost-devel libodb-boost-devel check-devel openssl-devel libaio-devel 安装scons 需要2.7 的Python wget https://nchc.dl.sourceforge.net/project/s…...

Mysql数据库必备基础命令

1.安装 [rootlocalhost ~]# yum install mariadb mariadb-server #安装 [rootlocalhost ~]# systemctl start mariadb [rootlocalhost ~]# netstat -pltun|grep mysql #默认端口是3306 tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 1…...

mutations vuex 调用_Vuex之理解Mutations的用法实例

1.什么是mutations&#xff1f;通俗的理解mutations,里面装着一些改变数据方法的集合&#xff0c;这是Veux设计很重要的一点&#xff0c;就是把处理数据逻辑方法全部放在mutations里面&#xff0c;使得数据和视图分离。2.怎么用mutations&#xff1f;mutation结构&#xff1a;每…...

vuex的mutations

vuex 的严格模式strict: true下&#xff0c;不允许组件修改state中的值&#xff0c;若需要修改&#xff0c;在vuex的mutations属性中进行修改。 注意&#xff1a;只能在mutations下的函数进行修改&#xff0c;如果mutations下的函数的函数进行修改也是会报错的 &#xff08;1…...

mutations vuex 调用_Vuex的mutations与actions使用详解 -

这次给大家带来vuex使用步骤详解&#xff0c;vuex使用的注意事项有哪些&#xff0c;下面就是实战案例&#xff0c;一起来看一下。vuex是一个专门为vue.js设计的集中式状态管理架构。状态&#xff1f;我把它理解为在data中的属性需要共享给其他vue组件使用的部分&#xff0c;...…...

mutations vuex 调用_Vuex中的Mutations的具体使用方法

在 Vuex 中 store 数据改变的唯一方法就是提交 mutations。mutations里面装着一些改变数据方法的集合&#xff0c;这是Vuex 设计很重要的一点&#xff0c;就是把处理数据逻辑方法全部放在 mutations 里面&#xff0c;使得数据和视图分离。Mutations使用Vuex 中的 mutations 非常…...

Vue进阶(四十三):Vuex之Mutations详解

文章目录一、前言二、如何使用 mutations &#xff1f;三、源码分析四、拓展阅读一、前言 通俗理解mutations&#xff0c;里面装着一些改变数据方法的集合&#xff0c;这是Vuex设计很重要的一点&#xff0c;就是把处理数据逻辑方法全部放在mutations里面&#xff0c;使得数据和…...

Vuex中的mutations属性

一、什么是mutations Mutation的中文翻译是“突变”&#xff0c;在Vuex中&#xff0c;它是store对象的一个属性&#xff0c;mutations被用于更新store中所存放的所有状态。关于mutations&#xff0c;有以下几点需要注意 更改 Vuex 的 store 中的状态的唯一方法是提交 mutatio…...

Vuex中的mutations属性详解

一、mutations属性介绍 是唯一一种方式来修改state中的状态的&#xff1b;在组件的自定义方法中&#xff0c;使用this.$store.commit(‘对应mutations中的方法’, 新的值)方法&#xff0c;把新的值提交给mutations中相对应的方法&#xff0c;mutations属性中的每个方法中有两个…...

Vuex中mutations的用法

Vuex中mutations的用法 在 Vuex 中 store 数据改变的唯一方法就是提交 mutations。mutations里面装着一些改变数据方法的集合&#xff0c;这是Vuex 设计很重要的一点&#xff0c;就是把处理数据逻辑方法全部放在 mutations 里面&#xff0c;使得数据和视图分离。 Mutations使…...

Vuex的使用(六)——mutations的定义和用法

参考文档&#xff1a;https://vuex.vuejs.org/zh/guide/ state是在整个前端应用中需要共享和维护的状态&#xff0c;而在之前的几章里主要介绍了state及其衍生概念的共享和使用&#xff0c;下面重点介绍一下state的维护方式——mutations。 官网对mutation的定义&#xff1a;…...

fgetc()从文件读取内容

#include<stdio.h> #include<stdlib.h> int main( ) {FILE *fp;char ch,filename[20];printf("please input the filename you want to write:");scanf("%s",filename);if(!(fpfopen(filename,"r"))){printf("cannot open th...

C++在使用fgetc读取文件时出现方框乱码

在类似bufferfgetc(fp)的代码外面加上一层括号 例如&#xff1a; 原&#xff1a;while(bufferfgetc(fp) && judge_number(buffer)){ 变成&#xff1a;while((bufferfgetc(fp)) && judge_number(buffer)){...

C语言使用fgetc()函数

fgets&#xff08;&#xff09;函数用法比单一&#xff0c;请结合代码一起理解 #include "stdio.h" #include "stdlib.h" int main() {FILE *fp; //定义文件指针char filename[200]; //存放输入的文件名字char str; //存放一个职工…...

算法提升:图的启发式搜索算法(A算法、A*算法)

启发式搜索算法 目录 概念 A算法 A*算法 概念 启发式搜索(Heuristically Search)又称为有信息搜索(Informed Search)&#xff0c;它是利用问题拥有的启发信息来引导搜索&#xff0c;达到减少搜索范围、降低问题复杂度的目的&#xff0c;这种利用启发信息的搜索过程称为启发…...

c语言中fgetc函数的介绍

点击上方蓝字关注我&#xff0c;了解更多咨询1、fgetc函数返回的字符实际上是文件流中位置指针指向的字符。当fgetc函数读取错误时&#xff0c;返回EOF并设置文件错误标志位。2、该函数以无符号char强制转换为int的形式返回读取的字符&#xff0c;如果到达文件末尾或出现读错&a…...

fgetc、fputc、fputs、fgets的使用

1.使用fgetc和fputc拷贝一个文件&#xff0c;例如将1.c的内容拷贝到2.c void copy_file(FILE *fp, FILE *fq) //fp被拷贝文件地址&#xff0c;fq要拷贝的文件地址 {int c 0;//接收fgetc函数的返回值while(1){c fgetc(fp);if(c<0)//文件结束跳出循环{break; }fputc(c, fq)…...

细说fgetc

fgetc int fgetc(FILE *stream) 注意到参数类型FILE *&#xff0c;因为这个函数是我们在对文件进行读写操作时常用到的&#xff0c;文件流&#xff08;即我们所定义的指向文件的指针&#xff09;。同时还要注意到函数的返回类型int,参考了其他博主一些文章后总结出来&#xf…...

fputc和fgetc详解

❤️强烈推荐人工智能学习网站❤️ getchar&#xff1a;本意出入一个字符&#xff0c;只能输入一个字符&#xff0c;这点很重要。 fputc:把字符写到对应的文件中&#xff0c;注意这里是字符。 fgetc&#xff1a;输入一个字符&#xff0c;说白了就是读取一个字符 #include&l…...

C语言fgetc和fputc函数用法详解

以字符形式读写文件时&#xff0c;每次可以从文件中读取一个字符&#xff0c;或者向文件中写入一个字符。主要使用两个函数&#xff0c;分别是 fgetc() 和 fputc()。 字符读取函数 fgetc fgetc 是 file get char 的缩写&#xff0c;意思是从指定的文件中读取一个字符。fgetc() …...

文件的顺序读写和随机读写,fgetc、fgets、fputc、fputs、fscanf、fprintf、fread、fwrite等等函数的介绍

顺序读写&#xff1a; fgetc&#xff1a;字符输入函数。就是把字符从其他输入到程序中来。<stdio.h> int fgetc( FILE *stream );//函数原型 //只有一个参数&#xff0c;就是被打开文件对应的文件流。 //返回值是所读取到字符的ASCII值。类型是 int。如果读取失败或者文件…...

fgetc 与 getc的区别

两个都是用来从stream中取得一个字符的&#xff0c;区别在于调用getc函数时所用的参数stream不能是有副作用的表达式(稍后解释)&#xff0c;而fgetc函数则可以&#xff0c;也就是说&#xff0c;getc可以被当作宏来调用&#xff0c;而fgetc只能作为函数来调用。 一般来说&#x…...