00:00
设计好之后下面编码实现就行了,那编码实现的话,我们这个地方牵扯到两个代码,就牵扯到两个代码没,因为他没有操作怎么办?一个是客户端,一个是ctrler。那先从底层开始写了,先写controller,在交易的control里边加一个方法,这个方法就是根据所选择的阶段来解析pro文件,获取一个可能性。所以我就直接写这个代码了,写这个代码在交易的CTRL的,在这里边加一个方法,这都涉及好了,知道吧,然后呢,在这里边加一个方法,那这个方法我就直接加了CTRL号public返回值什么类型的返回接字符串是不是OB杰对OB杰就行了。方法名,那你随便写了,那我这个方法名我就建明注意了,叫获取可能性,叫get可能性,叫possibility,根据什么获取by stage,根据阶段获取可能性,这样这样就行了。
01:04
然后呢,他这个CTR存窗法,将来他要处理来自客户端请求,处理什么样的请求,加一个request market,给他分配一个URL,将来客户端向这个URL发请求来交给他来处理。那这个UR我们说了,要和他处理自段路径保持一致,他处理的自段路径将来他访问页面应该访问响应访问哪个页面,是不是这个C5点加P啊,要和它的路径保持一致,它的路径沃和奔驰穿,所以我们这个地方继续来涡和奔驰,然后呢穿action,然后下边资源的名称要和方网名保持一致,然后呢点do这样就行。然后呢,这个方法将来要返回杰格那这个地方加一个response,这样就行了。然后呢,大哥这个方法将来什么,他要接收来自客户端的参数,那这个定义形态什么参数就是我们这个地方,就是我们设计好了,就是选择那个阶段的名字,把那个阶段的名字写到这儿去了。
02:12
那阶段名字,那我来这写一个吧,定个行的,那这个行章我阶段名字我就叫他了stage知道吗。这样的话,这个参数呢,拿到之后在这边写我们代码就行了。那写代码写什么?我们这个流程已经设计好了。现在我们这个什么接收到参数了,就已经来到这一步了,这一步做完了,下边解析pro的配置文件。然后呢,来获取可能性,知道吧,获取这个阶段最有可能性,那如何解析pro怎样,我们说了两种方式,哪两种,一种是大家以前学IO的时候学过的,用这个类叫proper这个类,这个类。它完全可以的,但是我说它用起来稍微麻烦一点,为什么?因为它牵扯到硫。
03:03
牵扯到流,你得写流去读那个文件,去一读那文件,他得牵扯到那个文件的路径。以前的文件路径有相对路径和绝对路径,这是程序员最头疼的事,所以这个类呢,现在用的不多了,以前都是用这个类,那时候用哪一个就用那一个,就这个类,这是JDK,后来提供这个类,就这个类。这个用起来更方便,它怎么用的,它也是JDK给提供的,是后来给提供的。它用的方便,它怎么用,大家知道它的用法就知道,然后呢,它里边有个方法,哪一个方法,就这个方法叫get,它也能解析pro里面,然后呢,这个地方叫盖这个地方这。啊,这个没有啊,Resource棒是吧?这写错好几次了,Resource棒是吧?不是resource就是resource棒是吧,不是帮resource就是resource棒是吧?就他那它里边有上对这个叫什么叫get么棒,Get棒。
04:08
它用起来比较简单,你吧来看get方法,再看它这地方有一个什么,让你给他传个参数,这个参数什么base name叫什么。文件的对文件的基本的名字,基本的名字什么就那文件名。那个文件名是它这个基本的名字叫什么,不带后缀名。只需要把那个文件名写到这儿就行了,哪一个文件名就这个文件名,对,把你这个配置文件的文件名写到这儿,就把它写成右键重命名一下,把这文件名拷贝LCTRLC,基本的文件名不带后缀名,直接把它写到这就行了,老老师他读文件,他读文件不带后缀名,他知道读什么文件吗?专门解析普的或文件吗?他就是解析普文件,不用带那后缀名,就这样。基本能献知道吗?然后呢,大概我说那这样的话,他就什么,当然前提是你这个文件呢,必须得放到resource的目录下,你要如果你老如果放到别的目录下行吗。
05:09
也行,但是你这个地方呢,你就不能只写一个文件名了,你写什么。放到哪个包下边,你得把那些包都得写写都得写上,知道吧,那当然我们一般来讲都是放到直接放到result,你下边再建几层目录,其实没必要了,知吧,那你要是万一在这里套下再创建别的一些目录的话,把它放到别的目录里边,你前面还得带上这些目录,就这意思知道吧。所以那我们一般都放到什么给目录下边,直接这么写就行了,它就会把找到这个pro配置文件,把里边所有的k value6全部什么都封装一个对象里边,封装哪个对象里边,他返回自己的一个对象,这种对象,然后呢帮都放到这个对象里边。这个对象里边就封装了这个pro的配置文件,里边定义的所有的KY6 KY6,然后拿到这个嘛,所有的KY6怎么了,它里边有个方法,对get方法,通过K就能获取到Y6了,哪一个方法就这个叫get,叫什么SP。
06:10
你想获取哪个K,把那获取哪个K对应的VALUE6直接把那个K写到这去,那我想获取哪个K。对,就传过来这个阶段名字,这样就获取value了,它这个字符串叫possibility这样的行了,这样就拿到这个可能性了。这个阶段这可能拿到之后怎么,然后可以把它直接返回就行了,然后呢,直接返回详应信息直接返回,那直接返回我们这个地方,前面加入每次方子包,对了,直接把这个字符串返回,它会自动转成阶层字符串。啊,当然这是最简单的一个阶段,就是说了这样的话,这个CTRL就行了,知道吧,他一选一个阶段,就把那阶段名字传过来,然后呢,到这儿去解析。
07:02
获取可能性就少不了。所以大家看用这个类呢,是比较简单的,当然你要用这个类就稍微复杂一点了,当然也不是那么简单,你懂,这也不是那么复杂,它仅仅是读一个瘤而已,他需要一个瘤。所以这是我们这样的,好,这个CTRL就行了,这个CTRL就行了,后台就行了,后台写了,下边就前台了,那来写示前台吧,这样,但我们来看前台,前台我们说就做两件事。从流程上来两件事,发请求,处理响应。发请有参数,收集参数,需要做表单验证,做表单验证处理响应再回到函数处理。所以首先来看发请求,什么时候发请求,对用户一选阶段就发请求了。那用户一选阶段发生什么事?对,是不是这个select上面发生了一个叫什么对称事件。所以我们下边要做的事就是给这个c select下拉框加一个称值事件就行了,所以我们来给它加加这个时间了,那加这个事件在c5.jsp上面找到这个下拉框就行了,所以我们来找一下吧,然后呢,在c5.jsp下边有一个阶段阶段的下拉框阶段。
08:15
就这个阶段就这个小框,然后呢,给它加一个change值事件,那加change值事件,我说加任何事件我们统一在入口函数里边加,这样就行了,在这边入写个入口函数加上就行了。知道吧,然后呢,写个入行数,那入行数是GS代码来个加个script的标签,然后呢,Type来一个告诉浏览器,我这是javascript的代码这里边了,然后呢,这样就行了,然后在这里边写个入孔函数,入孔函数就这样到了时候小括号里边传个参数,这个参数本身是个函数表示当整个页面加载完成之后,自动触发这个函数,我就在这里边给元素加视角就行了,那我这个地方要给那个什么阶段下拉框加一个change时间,那我就给它下了,给什么给阶段交易的阶段下拉框添加添加添加橙汁事件。
09:13
干了什么?然后呢,那给他加这种事件的话,还是我们以前说的那种语法啊,要给哪个元素加设,首先选中那个元素,拿到那个元素的铁块的对象,那通过选择器去选,我们用ID选择器拿到下拉框的解刨的对象,下边调视间函数。那调视角函数,我们说称值视角,那就这个change这样就行了,然后在这个什么函数里边提供一个参数,这个参数本身就是个函数。表示当这个元素上面发生称子事件的时候,然后自动处罚我们这个图库,我们把代码写在这里边就行了,写在这里边干什么?我们说两件事发请求处理响应。发行时有参数收集参数,收集什么参数,根据咱们的设计,就是那个阶段的名字,知道吧,或许他选择了某一个阶段,这个阶段的名字。
10:10
好,那这那获取阶段名字,但怎么获取。是吧,对,获取value值是吧,获取value值,那获取value值怎么获取好多种方式了是吧?其中最简单一种方式叫什么?对,This value是。但是这样获取的哈,你看它获取的是什么,它获取的不是那个名字,对,获取的是ID,是你选中的某一个选项,它的ID,你选中谁或就等ID。这是我们以前给大家讲过的select的标签,你认为要获取谁获取那个value,获取那个value就是选中哪个option,就是那个option里边那个value值,就那个什么ID就是那个ID,哎,你你让你知道霍云那个对你看看对你看看这个这种。啊,我们这些大家你都可以测一测,你知道吗。
11:03
他每次选一个阶段,或许都能阶段对应的那种ID,你看吧,这是select的这种标签的,它的特点就是它本身没有Y6,没有Y6值,它的Y6值是什么?选中哪个option,那个option的Y6值叫做Y什么,它的Y6值知道吧,我们说凹人的Y流值保存的是阶段的ID,你看我们这个地方张三来一个它。YF123你看一看,然后呢,交易创建交易,你看我选一个的哈。就是选哪一个获取的那个阶段的ID。那获取名字怎么获取啊。对这个的话,那有有同学是吧,那时候获取那个名字,选中哪个option那个名字我不好获取是吧,有的人说老师这样这样开过去是吧。就是你要猜是吧,所以大家我们前面给大家讲了是吧,你要编程要会猜,是要敢猜,其实这就猜的。那value是么?是他的什么,那个ID值,那它的名字不就是那test的吗?是不是让是不是让你看一看就知道了,知道吗?所你你要会猜,但是猜的不一定一猜就对,那肯定猜猜不对猜不对,反正又不犯对应那种也也没人找你麻烦知吧,那你就猜,其实这种思路应该是对的是吗。
12:23
嗯,这种思路对的,但是他也许结果不对,但是这种思路应该是编程思路是对的啊。你比如说打我们这地方来个张三,你看你能获取到吗。然后呢,这个地方来交易点它,然后呢,这个地方就获取一个。安find的获取不到是吧,安find什么意思。对,这个属性不存在,对谁,哪一个属性不存在,谁的属性不存在,对这个this this代表谁select盗对象,Select标签里边没有test,没有test没有这个属性,所以就是。
13:01
知道这个标签压根就没有这个属性,它有Y6属性,但是没有太属性,那获取怎么获取是吧。对,那我们以前是获取Y6个属性,是不是还有这样,对高老说这对还还可以这样因呢,对也可以这样,这个大家也也有什么,也按这种思路也是对的,叫什么。叫叫什么叫什么HTML是吧,是不是这这也是获取里边内容,你看这个能获取到吗?啊。这些,所以这些思路都是对的,按理说知道他也也许什么,他没有这个属性,但是你得试一试知道吗。是,所以说呢,以后我们写编程,编程的时候有可能有一些用法,你从来没用过,但你得会猜,猜的不一定对,但你可以试一试。那你要猜的合理,一般都是对的,大多数都是对的,他不是所有的都对,但是大多数都对的,因为这些技术也是人制定的人,大家这种编程的思想,制定这些规则的这些人,他们也是程序员出身的知吧,大家看这个地方也啊,到时获取到了是吧,这获取到是啥啊。
14:15
对,来的标签里边是不是全部里边内容,全部里边内容。包括这标签。所以说这个是么,他真这边也获取不到,或者说要再再看怎么办呢?还有什么可以猜到什么,但我们以前学过一个什么获取Y6属性值的时候,是不是学过解块的对象点叫什么VL,这能获取到Y6属性值。那我说什么Y6值Z4点Y6可以获取,那我什么我想获取里边内容。是不是可以test的这样开他这个地方你可以获取啊,你看这样,所以这些都是我们用熟练了你才能想起来的,还是那句话,大家写代码你会了知吧,你会做一遍并不一定就就知吧,就算完了,你必须写熟练了,你才能用了这种用熟练的话你才能用这花样。
15:10
否则的话,你只是会了,看着别人的代码能够写下来,还没有达到我们的目的,你看这样,然后呢,这个地方继续来这样好这样,然后呢,大看这个地方来个交易,创建交易,选一个大家看。这一个大家看他获取了所有那些什么阶段的名字了,是不是这样的,这个比较靠谱一些,说获取所有阶段名字,为什么他就是一个select标志里边所有的文本信息啊,阶段名字都在这个select标志里边,所有的文本信息,所有阶段文本信息。那知道为什么获取所有阶段呢?就因为你这个范围是不是太大了,你这个是代表select的,Select所有的文明信息都获取到了,我就要获取某一个office的文明信息怎么办?对,把它的范围缩小1TEST一下,是不是就获取那个option的那个什么,对option的那个那个标签体里边的文本信息了,那我要获取某一个option呢文本信息,那我得获取那个选中的那个option的解块对象,我获取选中的option的结块对象,咋咋咋获取啊。
16:21
对吧,怎么了过去。它里边它里边有个函数,不知道大家以前用过没有哪一个这一个函,这一个是不是是不是代表select的标签啊,在某一个使用某一个标签的解块对象,找到它下边某一个子标签咋找。对,它里边是不是有个函数叫什么,Find find final什么意思,它这个函数表示什么?表示找到在这个标签下找某一个子标签,去找哪一个子标时,这里边去写上那个子标签的目标选择器,我要去找当前这个塞下边某一个标签,哪一个标签是不是某一个option啊,找哪一个option。
17:09
被选中的option被选中的option怎么办?冒号过滤一下干什么?谁来这个啊?这样的话,我就找到这个c select下边被选中的option,拿到这个被选中的option呢,一是不是那个名字就拿到了阶段名字就拿到这样就可以了。好,下边我们来看看这个函数,不知道大家前面用过没有,用过吧,对,没有,大家现在记一下可以,以后这个函数也是比较常用的,找到某一个标签下边的某一些子标签,知道吧。这是我们这样就可以了,看看。然后呢,这个地方来个张三,然后呢,这个地方来个Y123点进来,然后呢这个交易点它,然后呢,这个地方选一个好吧。
18:02
选中哪个option,把那个option的里边那个文本信息就找到了,知道吧,拿到之后就那个阶段名字了,知道,所以这是我们要说的这个地方就可以了,拿到这个名字了。这种方式可以,当然这个这个发动别人大可能前面没没用,按理说你得记下了这吗?这这以后会用知对也可以,那吧,用父子选择器也可以,我又找offer,那怎么这样,这样用也行,父子选的也行,父子选我想找到某一个s select的下拉框下边了,被选中的option怎么办呢?副词选择首先得找那个什么下拉框了,这时候拿到那个下拉框了。ID选择器找他下边的标签什么对,用个什么监括号也行,用一个什么熬成是不是也可以,那个空格是不是也可以啊也可以是吧,然后呢,Option是它下边被选中的option叫什么S。
19:05
这时我们说直接找都能熬不成,找到它之后干什么开的也行,这样也行是吧,这样就行,我们就定一个变量保存到VR来,一个叫stage来,这样也行啊。这两种方式都行,这是这所以这个解块位大家是吧,用熟练呢,对能解决你不少前端的一些这个问题啊。这时候我们这样,我们就用这个吧,就用这个也行是吧,然后呢,大概那这样的话,参数收集到参数收集到下边可以做个表单验证。表单验证,表单验证验证什么验证这种情况哪种情况大,万一他什么选完了之后,他你比如说大看选了一个需求,需求分析这个阶段,那假如说我们如果做完了这个地方带出来一个可能性,假如说20%好了,那如果他又选一个呢,他不不想选这个了,他选这个了。
20:06
一选这个空了。一选空了,到后台能获取啥?啥也获取不到,报错了,因为那个key那个resource b的resource b的那个K呢,不能是空的,如果是空的那个那个报一统了,所以他这个什么,如果或取了一个这样一点,这样一选的话,是不是或取那个名字是个空啊,是个空你就别向后台发起了干什么。你得只需要是不是把它清空就行了,后台不让后台发行,你将后台发行也没意义,它就是根据阶段获取可能性,你阶段没选,没选它怎么获取,所以在这个地方判断它是否为空,如果为空,把以前输入的这个什么,以前选的那个可能性把它清空请求都不发了,所以我这个地方可以做个这么一个验证,如果说它等于空,那就空字符串了,然后呢,这个地方干什么清空,清空可能性输入框,清空这个输入空。
21:10
那清空输入框咋清空。对,跟那个输入框那个Y6值是不是是个空值啊对那个跟那个可能性的那个输入框可能性在哪了看看。这就这个,给这个输入框输个空值就行。倒老的时候啊,然后给他付个控制点Y6这个控制就行了,付完控制后边代码还用执行吗?不用了,直接return呢,这样那如果他选的不是空不是空,那这个时候就是不是要向后台发请流了,对向后台发送请求,他选了阶段了,就去根据他选的阶段向后台发请求获取可能性了,那根据我们的设计是个义务请求阿加克斯,然后呢,这里边传个对象,这个对象那个URL,那这个URL就是我们这个刚才写这个UR。
22:11
要到后台根据所选的阶段获取可能性了,知道,然后呢,这个是贝把我们参数传过去。这个参数有一个参数名,参数值斜杠的名字知道吧,然后呢,下边请求方式来一个post,然后呢,这个是data探索,然后呢,这个地方返回,返回信息相应信息这个结算。这是前台第一个职责就完成了,他每选一个阶段都获取那个阶段的,你知道都获取那个阶段的名字,判断是否为空,为空不发金牛,不为空发金牛。然后呢,下边处理相应翻过身,然后这边一个data塔接收相应信息,这个data就是谁,就是那个可能性,然后把这个可能性显示到那个输入框里边就行了,所以这个地方把获取到的可能性,然后呢显示在那么输入框中,这样就行,那如何显示到空输入框中。
23:16
那还是那个获取这个输入框,然后呢,给它的Y6负个值就行了,这个值就是啥,对,就是得塔,这个得塔本身就是那个可能性。这样的话我们就可以了,他每选一个阶段就自动带动可能性。好,这样的话呢,我们这个关于我们这个阶段这个什么可能性的可配置,我们就做完了,整个流程前台后台都想完了,下边就可以测一测了,下边启动,然后呢,这个地方呢,启动服务测一测。
24:07
然后呢,这个地方来个张三,然后呢,这个地方来个YF123登录,然后呢,这个地方来个交易,然后创建交易大看这个地方我选一个什么,选一个看吧,它会自动带过来,选一个带过来,选一个带过来,如果选这个就清空了啊。这是我们这个可能性的可配置这个,但这个地方还有一点问题是吧,还有啥问题,他选完之后是是是不是可以改啊,对,所以说大家既然让他选了,是不是就不能改了啊,你说。对,把它改成read了就行。把这个可能性这个书框改成V的,来找找这个输入框看在哪吗?往下找就这个地方。把它做成一类只读的,想改都不能改,只能选。所以这样的话,大概我们这个关于可能性的可配置的,我们就给他家说到这儿啊,这一个我们就做了,嗯,可能性可配置。
25:07
一会儿我们来看看这个客户名称支持自动股权,下边看自动补权,一会儿来做这个,好,下面大家休息会就息,我们来看这个自动补权怎么来做啊。啊,下面我们来看这个客户名称的自动补全这个地方。啊,他说是这样,他说创建交易的时候,必须指定一个客户,必须以公司的名义来购买,必须指定客户,那说指定客户的时候,那说那这个地方就有问题了,有什么问题,他指定某一个客户,那指定哪一个客户,哪一个客户他就把那客户的名字输入去了,就是那个公司的名字,那输入的时候,咱们其实上课已经给大家简单分析过了,说这个客户的名字,我们后台得需要一个客户这个名字的完整的名字。他如果输入简称的话,不能唯一确定一个公司,他只能输入完整的名字,但是呢,用户让他输入完整名字,他输入不了,他记不住。
26:03
这不可能的,那干什么就提供自动补全这种功能,所以这种情况下就用到自动补全了。就自动补全的这种技术的知道吧,它的应用场景就这让用户输数据,这个数据他只能输简称。他只能记住几个关键字,但是我们后台得需要全名,这个时候就用的自动补全知道吧,那自动补全的效果就这样,怎么是什么效果,用用输知道吧,输那么叫动力节点,你比如说输关键字的时候,每次键盘弹起向后台发请求去到后台表里边,根据名称模糊查询,去把所有查询到的数据返回到前台,列到这下边,列到下边,然后把全名都列多少用户。给哪一个公司方向选中,选中完了之后,然后呢,把这个全名就补全了,然后把这个什么这个框给他什么隐藏掉了,这样的话,我们就就实现了自动股权将来一点保存,把这个名字保存到后头了,知道吗?所以说当然我们说这就是就是做成这种效果,那做成这种效果我们做的话,其实应该分这么几步来做。
27:15
哪几步,首先我们要做的话,要什么?要给这个搜索框,要给输入框加一个键盘弹起视角。然后然后做这个那加键盘弹起事件,每次键盘弹起向后台发请求,把关音字发到后台,后台去查询,从这几步就自动补权,我们这种给大家说一下吧,这自动补全那一个这一个然后呢,这个可能性靠配置,然后呢继续来这个客户名称自动补全,自动补全就自动不全它的实验步骤,我们应该是这么来做,就你要做的话,你就这么来做第一步,然后呢,给给什么,给输入框,给输入框添加啊添加键盘弹起事件下键盘弹起事件,每次他输入关键字的键盘弹起向后得八请求,把关键字发到后台,后来根据名称去模糊查询去知道吧。
28:18
然后呢去查询,嗯,查询完了之后,把查询结果返回,返回干什么,这个后台什么后台接收到请求请求,然后呢,去根据名称,根据名称去模糊查询啊查询数据,查询完了之后把数据返回到返回到客户端,返回到客户端,然后怎么办呢?那就把它返回的数据显示到这个什么对下边这个什么输入框下边,然后呢,在这个地方,在后台把搜先搜索到的数据,那么把查询到的数据,把查询到的数据然后显示在显示在输入框下面啊啊。
29:06
显示到下边之后,然后呢,用户就可以选择一个了吧,然后呢,用户选择用户选择选择一个什么一个客户吧,客户,然后呢,他一点这个地方,然后实现自动补全了。然后把这个下边这个这个什么,这个显示的这个列表隐藏掉,然后自动补全上就行了,所以实现自动补全,补全就这样吗。这样的话,整个这个过程我们就做完了啊。所以说大家我们要做这些么,真正要做一个功能,你首先分析一下。这些功能到底到底怎么去做,知道这是我们说到这那这这几步大纲对我们来讲的话,做起来简单吗。那你分析一下,那简单吗?那你看看第一步简单吗?加试件简单是吧?第二步呢简单是吧?查询数据接收到请求查询数据是不是也很简单啊,第三步简单吗?
30:07
对,第三步其实其实不简单,对,你看着简单,但是其实不简单,做什么,我们说得列到这下边。列了这下边怎么列,就相当于模拟一个下拉列表,是不是这样吗?对模,你要模拟一个下拉列表,其实不好模拟。你得在这个地方做个区域来显示这种数据,其实它其实这个地方第三步不好做,把搜索数据显示到下边,然后然后都加上单击事件,我怎么做怎么怎么不好做,这个窗口做多大。你怎么知道做做度到宽度高度做不到,而且显示完了之后,每一条数据都加上单击事件,然后呢,加上单击事件还不行,用户点了之后还能获取到这个数据的名字,获取到之后给他补全的,这时候然后把这个地方隐藏掉,其实这个地方真正做的话不容易做,特别是对Java成不容易做。
31:00
程序员,我跟你说,这美工其实做也不大好做。所以那不太好做,他跟我说那怎么办呢?对不做了,说怎么不做了,我们说只要遇到这一类问题,只要遇到这是这是一类问题,不好做的这一类问题,感觉无从下手,或者做起来很难做的这种问题,看看是不是符合那俩条件啊,又又遇到这种问题了,做的时候不好做,压根自己不好做吗?那有老师上面这这这先先看这个吧,那你说这种问题不好做,那是不是符合那俩条件,哪俩条件第一个。这个做起来是不是很复杂很复杂,我们刚刚分析啊,要模拟个下拉里边很复杂啊第二个。跟业务有关吗?自动补全这个地方来看要我要是么?查出来数据列到这下边,然后一选一个,然后呢,让他补全,是不是只有你的客户名称需要自动补全。以后你再做别的功能的时候,需要自动补全吗?
32:00
也有可能啊对,只要是说让用户输全名,他不知道,他只能输关键字,但是我们后台需要全名的这种情景,这种情况下都需要用到自动补全什么样的,你比如说大还有这样。你比如说这个地方,这是客户名称,假如我让你做一个功能,这个让你选了一个国家的名字。国家的名字,那时候国家的名字都很长。都有政治含义的是吧,那我说让让让让,让你记中国家的某一个名字,然后呢,后台需要一个国家的全名,让你选一个国家的名字,那你你让你写一个国家名字,谁能记住你哪一个国家的名字,你比如说他啊。就是假如美国,美国大家都知道美国,我让你输入美国的全名,你会吗?对,我论英国,你说英国大家都知道,要说个英国,英国的全名是啥?
33:04
对这这这这就不好办了是吧,对这就不好办了,所以说呢,因为他这都有政治含义的是吧,所以呢,你这个让他说这种情况也有可能用到自动补全啊,你输入一个英好了,所有名字里边还有英的这一种全出了,你选中一个补全了,所以这也有可能是张还有一个,还有那有一些地名之类的这些。也有可能会用到自动,所以说大家这种功能跟业务没有关系,就是是跟不是跟业务绑定的,所以这种功能一定有别人帮我们做好了。啊,谁帮我做好,那些擅长做这一方面这个开发的人帮我做好,其实都是那些美工帮我做好了,所以他这些都有插件的,自动补全的插件是吧?所以下面我们准备来给大家研究一下,自动补全的插件都有插件自动补全插件知道吧,那有同学说啊,老师你上面这个咋没有插件,哪一个就上面这个东西啊。
34:04
配手价有没有插件?这行。对,这个能写出来没有那么难是吧,对,没有那么难,其实大家看像这些这些东西也就相当于插件,你看解析的也就相当于插件,就别人帮我们做好了。这也就相当的插件,就是你让你自己解析你就很难了,其实这也相当插件,这只不过是后台的插件啊,所以这时候我们要说到这样,好,下面呢,我们来来看看这种自动补偿的插件,那自动版是补偿插件多不多,多网上一搜很多,但咱们不用别的,咱们用了整个项目就是基于不得所,所以我们准备用的boot的一个自动补全插件,哪一个插件就这个叫type or type这个插件叫自动补全的这个插件知吧,好这时候啊这样,那使用这种插件,那这种插件干什么,他帮你完成这些事,完成什么事,完成这个地方,等到这个地方给他上面加上一个什么键盘,弹起试卷,他给你讲。
35:02
你每次输入关系,每次加满碳级,它都可以帮你向后台化请求,发请求干什么?你去查数据,查出来数据按照他的要求,以监测字符串的形式返回,返回来之后干什么?他把你查询的数据给你列到这下边,列在下边干什么?在这儿把东西列列上,都加上单机时间,你选一个好了,他给你补全了,并且把这个隐藏了。所以这些事儿他都帮你做,就这插件帮你做,自动补全插件。知道吧,啊,所以这时候我们说的这种插件,那下边我们就来研究一下它这个插件的使用了,那它这种插件的使用的话,还是给我们以前给他讲的那些前端插件的使用步骤是一样的。它也属于前端插件,在页面上来用的吧,也属于前端插件,那前端插件使用步骤咱们前面给大家讲过,不知道大家还记得不记得前面前端插件使用步骤哪几步,第一步干什么?对引入开发包,开发包把它的开发包下载下来,然后并且引入到放到拷贝到你项目里边,在你哪个页面里边用,是不是还得引入页面里边,然后那他这开包无非就是什么点CSS,还有什么点GS,无非就这是吧,好,这是我们第一步,第二步呢,对创建容器是创建容器,创建容器,创建容器,那这个容器就是说将来有它这个插件运行的结果输入到哪一个标签里边,那么这种容器我们最常用的容器,一个是div,它表示一些复杂的一些插件,懂吗?还有一些什么,简单是就是单行的问号,知道叫音input。
36:42
Put,然后呢,Type等于它tap对吧,那我们这个地方的话,是不是有大号问号呢?对这个容器就有了知吧,然后呢,这两步其实都是做准备工作的第三步干什么。是吧,对啊,如果你这什么你也引入他的代码了,你也什么给他准备好他的代码运行之后,运行的结果输入到哪个地方了,但是它的代码会不会自动执行,对不会自动,你得调它的工具,还是不知道是不是知样的,对当容器加载完之后,容器加载完成之后,然呢,对容器调用中函数工具与函数对容器调用工程是吧?啊这时候我们说到这三步,当然说这三步里边最难的是不是这一步,这前两步都不难是吧?最难这步调公具函数,那调公弦函数难,难在难难在什么呢?就调的时候他那参数懂吗。
37:45
其实主要是研究它那个参数,把参数研究明白了,然后呢,这个函数,这个公这个插件基本上也就会了,知道吧,那参数到哪去研究,官网上面,甚至网上也有一些现成的例子,到时候找就行了,知道吗?所以这是我们说到这好,所以说当然下边的我们就按照这三步来研究我们的type hi的这种自动补全的插件。
38:07
啊,这个这个好消息在于什么呢?这个插件它这参数没有那么多,我们用到的参数,其实有用的参数就一个,所以这个插件的研究呢,就比较简单了,知道就比较简单了,它这个这个插件,但是它还有别的参数,那些参数基本上我们用不着,所以我们不给他演示了,它就一个有用的参数。知道吧,别的参数虽然什么他提供那些参数,但是我们用不着也不研究了,知道吧,所以这是我们说到这,下边大家我们就准备这种给大家通过一个简单的例子,还是先研究出来它这个插件,看看它怎么用,研究出来之后再把它放到CM项目里边就行了,所以这时候我们说我们得写一个简单例子了,写一个简单例子来研究typeb ipad这种插件,然后呢,那写简单例子的话,它属于前端插件的,所以我要写一个页面了,那写一个页面,既然是测试页面,那我写的外部APP下边,这样以后代码好,那个演示到时候好演示,所以在这个地方来创建一个页面,那这个页面是我们的,来一个叫tap和hi这个插件,我们就把它叫test.gsp这个地方来演示,演示什么,演示我们的叫自动补全的插件,自动补全插件就行了。
39:23
好,这是这样能形容啊,那我如果大看,那将来我一会儿话,在这里边要引入开宝包,引入开包China里的u o China的UL,我最好在这边引入一个什么J个么base标签了啊,引入base标就base标这我就不一个一个写啊,我在这个地方引直接拷虑过来。好,这是我们这样篷,然后呢,大家看,那这样的话,大家看我们这个这样就行了,是然后呢,再家看这个页面就提供好,提供好之后呢,按照那三步走就行了,就是三步,第一步我们说引入开发包,那这个开发你首先要下载下来,然后拷贝到我们项目里边,然后把它引入页面里边就行了,那这个开发包到哪到它官网上去找就行了。
40:12
他这个官网,但我们就不到他官网去找了,我这个西给他下载好了,我们就不不一个一个找了,你找他这个不,他那个什么,他这个官网上直接去下载type head就行了,我这个里面给下载好了在哪在这个地方,我就课堂上我们就不给他找哪一个在这个地方叫type,就这个行,他在这个开发包只有一个GS文件,没有CSS,到时候你直接把它引进来就行,知道吗?好,这是引入开发包,把它下载下拷贝到项目里边,然后呢,把它引入到页面里边,行了,引入到页面里,我这个地方直接引入就行了,那直接引入,把这个地方引入GS啊,我就直接引入了,然后呢这个type,然后呢这个然后呢这个地方src,然后呢这个地方引入谁解下边的谁不drive,然后呢叫太head,下边谁叫不drive,然后呢,这个地方引进了这个地方看这这样引进了,这样引,这样引是最规范的,你别这别这样啊,有的时候有的同学这么引。
41:13
引GS的时候最好别这么省,对这样省的话,引不进来,知道引不进来有问题,所以你最好别这么省,这样这样写,这是最规范的结果,好吧,好,这样的话呢,我们这个引料开发包了,引开发包我们说它是基于步骤在的框架的,所以它不能独立运行,你要想让独立运行,首先引入不骤所在框架。所以引入不道所在框架,再一个我说不道所在框架又继续解剖的,得先引入解剖,所以这两个引入呢,我就不一个一个写了,干什么考一个。谁呢?就这个吧,这是引入解query,引入不得框架,知道吧。把他们引拷贝过来,填着C拷贝过来,然后呢,把它放到这里边站起来,然后呢,这个地方引入泰博海的,然后呢,引入叫type ahead。
42:12
然后呢,大家看这个地方引进了,然后呢引进了,大家看这是第一步引入开发包,我们就引好了,下边创建容器,那这个容器咱们刚才说了,那肯定就是单号欧面框知道,那我这个地方我就在测试页面上边专门建一个单号欧框,它上面来建一个单号框,然后呢,这个是type来一个叫test,然后呢,这个地方来一个ID,那这个ID来一个假如咱们是客户的名称,那我就我就假如叫他了custom name知道吧。这时候我们说这个啊,这个单号的用窗我们就提供好了,提供好之后呢,下边第二步我们就懂完了,下边第三步,第三步我们说当容器加完之后,对容器调工函数就行了。那我们这个我们一般习惯是什么?当整个页面加载么?在入口边调公角函数行,所以我这个地方写个入网函数,这看来一个条,然后呢,这个地方来一个碳,然后呢继须来,然后呢这个地方来一个,这个地方来一个三式,然后呢在这里边大家看当容器加载完之后,当容器加载完成之后,然后呢对容器调用工具函数,工具函数就像。
43:33
那调公具函数,我们说大看对容器调用公具函数,调哪一个工具函数,它文档上都有知,那怎么办呢?到它官网上去找,它这个官网好像是这一个插件的官网,不大好找。不大好找,你该可以到网上随便找一个,因为它它这个参数比较少,就一个参数找文来找一个找不得drive的,叫type have。可以搜一下啊。
44:01
但你看这些官不找不好找这个。这是好像这是一个人翻译过来的官网。对,你看看这个。啊,所以大家看你看这大家看他是教你用嘛,你type还它有好多种用法,在本地用数据在本地用,也是在在别的地方用的,然后呢,大概就这个函数好吗。这是那个,这是那个容器,然后调用工具函数知,然后呢,他好像他这个用这个参数呢,再看他这个参数是通过外部来获取一个外部是动态的这种动态的这个数据源,但咱们不用这个动态,那吧,咱们用哪一个呢?咱们找一个比较简单的一个啊,哪一个数据源啊,找一个数据源。他不还了。Table head这地方有没有?还这个local local这个他用的不是这个啊,找再找一个吧。
45:04
找这个大家看,这是他不是做出效果,你看这个,这个也不是官网啊,这也是谁写的你知道。知道这谁写的博客,知道他这个人应该用到了哪一个地方,我们准备用这个,看我们准备用这个,就这个参数,就这个参数我们能用到,他别的参数基本上我们都用不到,它最有用的就这个参数。知道吗?就这个参数,好,下面我们来看看这个参数怎么用一下,当然它调函数就调这个函数好吗?我们下面给大演示用一下啊就行了,那用它是这样,对容器调工器函数对容器调,首先拿到容器的结块对象对容器调,拿到结块对像调谁调那个函数,哪一个函数叫这个叫type和have,就这个函数,知道吗?调它就行了,在这边它传输参数,这个参数本身是个对象。在这个对象里边有一系列的参数名参数,不是参数名参数,它定义了很多参数,但是对我们有用的只有这一个source。
46:07
搜索什么意思?翻译成中文叫什么对来源什么来源,什么来源,数据的来源,什么叫数据的来源,但你想啊,你将来将来要让他给你实现自动补全,自动补全你输入一个关键字,他要去什么,去数据里边去比对,去把所有名字里边含有关键字的那些数据给你什么比对成功了,然后都给你列到列了他到哪些数据里边去比对去,就这个S指定一个数据源。他你将来在这输入关键字之后,每次加上他,他会拿到你的关键字到那个数据安卓去比对,把数据源里边含有关键字的这些什么,这些记录全给你列走了下了。从而实现自动主权道吧,所以这个地方让你指定一个数据源,知吧,那说指定数据源,这个数源是什么样子,你可以给他说,可以给他写上,写什么,他是什么格式的,既然数据源一定不是一条记录,有可能是多条,那多条怎么给他提供,他说后边这个数据是个什么?数组是GS,数组中括号是数组在这里边,把你的数据源列到这里边就行了。
47:17
那这里边数据源到底有几个,按理说应该从数据库里边查出来,但是我们给大家写这个例子,我就不从数据边查了,干什么呢?这个地方给他写死几条,怎么写死几条,来一个一个的,这授权肯定都是各个公司的全名。他去拿到关键字,到这各个公司里边全名里边去比对,去看看名字里边含有关键字,这些公司全给你列到这下边,那我这个地方,假如我写几个全名,那就写几个全名,说随便来一个吧,给我来一个啊,公司的全名来这几个,假如来个京东吧,啊京东啊。京东全名是啥?对,不知道,那来一个谁,咱们就给他造一个,造一个知道吧,假如说京东的全名就是他知道吧,然后呢,再来一个,来一个还有一个什么,哎,假如来个阿里,还有还有什么,假如说来一个。
48:18
还有啊,还有什么啊。百度是吧,对还还是什么公司叫百度什么这个网络是吧,百度的公司这全名是好像都不太知道是吧,网络科技是吧啊网络科技是吧公司吧简那小是吧,这这几个几个了,再来一个再来一个,假如说来一个啊,还有一个最火的也相当于这一个啊。啊,对,字节跳动啊。嗯,就这样吧,这是四个公司了,再来一个最大的那个公司。
49:04
哪一个最有名的对吧,对动力节点最大的,对动力节点比他们大嘛,其实比咱们大,咱们培养这种这个程序员培养十来十来年了,是吧,每年培养出来这么多程序员,比他们成员应该多知他们这你说他们这个公司他们他们大的话,也不一定有有这个动力阶点培养这这个成序员多知,对每每年这么多知吧,这么多成序员比他们都大。好,这样的话,大概我们这就行了,按理说这些数据应该从都是从数据库里边查出来的。但我这个地方我就直接写死了。你只需要给他提供这个数据源好了,你调它这个函数,它就自动的给这个什么输入框加了一个键盘弹起时间,你在这边输关键字,每次键盘单起,它都会自动拿到你关键字干什么,到这边去比对去,只要名字里边含有关键字的这个公司全给你列到这财网,你一选中一个自动补全了,知道吧,所以这是我们说的这个插件,我们就给大家卸完了,这是最简单的一个插件了,好,下边大家启动一下,大家可以测一测你看啊。
50:38
然后呢,这个地方,那我这个地方我没有访问R,所以不用登录了,直接访问测试页面就行了,叫type和have。还DSP啊啊有test的是吧。待会我们测试件事,就这个容器的,那你输入一个,你比如说来一个京东是吧,来一个京东。
51:04
看吗看吗。你键盘一弹起,他就拿到你关注的道路数据,安卓去比对了。把所有含有京东,那么你的关键字的这个公司都给你让列在这列在上边,你选一个你啊,你选中大咖给你补全了好吗。你输一个,你来个动力节点。把所有含有动的这个公司全给你列出来,列出来之后选中一个股全了。所以这就是他这个自动补全的这种功能。做这种插件,其实这个插件是最简单的一个插件。好,这是我们说他这个插件的这个用法,但是这个插件大看它有一个有一个问题,有问什么问题,这个数据源现在我们写死了,在实际开发的时候可不可能写死了,这不可能的,你要写死,万一这个公司变了呢,是不是就不行了,再按理说是不是从收入者查出来,那从收入所查什么时候去查去。
52:04
那个圈。我要什么时候考?改变的。对改变的时候改变哪就是改输入关键字的时候去查是吧,那对输入关键字的时候是不是键盘弹起,应该是查觉,这样是不是最合适的,那键盘弹起关键是他自己家的事件,又不是我家的,他怎他怎么去怎么去触发我的代码去查询。对对,是这样,这个S后边这个数据源现在我们写死了,是静态数据源,它可以是动态的,对它后边还可以有个参数,这个参数可以是个函数。当我们来看看他这个什么,当这个数据源是动态数据源的时候,怎么来做它,这样我们再写一个例子来看看。这样说他这个地方数据源后边可以是个动态的,我这个再拷贝一份,哎,这个地方拷贝一份,把它前中C拷贝一下,让他在这个地方再写一个,这是第二个吧。
53:02
演示这个插件,然后呢,这是第二个。这样他说什么意思呢?他说这这个数据源你可以不用记他的。不用进来干什么,他说这个后边这个什么,这个这个参数的值还可以另用另外一种形式,哪一种形式可以是个函数叫方这个函数。就知道吗?这个函数里边有两个参数,这俩参数是什么,现在你可别管,一会儿用了我再说,然后呢,这里边有参数,一个叫process行,这俩参数什么意思,你先别管它。你先就当没有他就行了。他说这个数据源后边可以是个函数,这个函数什么意思?来,你猜一猜什么意思。对,里边可以写你的代码,到后台去查数据。查数据,你可以查相互台发查数据,你猜猜那个数据的格式这是什么样子的。返后台查询到数据返回的格式必须什么样子的?对,必须是这种必须字符串,而且必须是这种字符串是不是这样的?把你后台所有客户的名字以这种接线字符串数组的字符串名字组成字符串数组,以他的形式返回到前台,返回到前台干什么?复制给他就行了。
54:18
这样也能实现自动补全。只不过这种自动补全,每次键盘弹起,他都相互的查动态数据了。后台以阶自符传的形式返回赋值给搜死,它就实行自动布权了,就这个意思,所以说大家这个函数什么意思呢?这个函数是这个意思,它这个函数它的作用是将来每次键盘弹起,每次键盘弹起输入关键字的时候,每次键盘弹起,每次键都会自动的触发本函数,那触罚本函数干什么?我们可以什么?可以向后台发请求,发送请求,后台发送请求。
55:04
发送请求干什么?去查询什么?去是不是到客户表里边去查询客户所有的名字去啊去查询,查询客户表中所有的名称,公司名称,查询他干什么,以接送字符串的形式,以什么以这种字串的形式形式返回,返回到前台就返回到这儿来,返回到这儿来干什么。然后呢,赋值给赋值给谁,赋值给SS,这个参数怎么赋值你先别管,总之这个函数它的作用就是说每次加上题,我们可以在这里边向获得发请求,写我们的代码发请求。发请求干嘛?去查客户的名称,以这种字符串的形式,把所有的客户名称以这种字符串的形式返回到前台,复制给sources,然后呢,Sources根据关键字会到这边去比对去。
56:03
知道吗?把所有的客户名称,把客户名称以杰森字符串的形式范围,这样行了。所以这是这个函数的作用啊,每次键盘探你都会出自动触网,我们就可以在这里边向后台发请求去查了知。那后台发请求是啥?那下边我们就什么就去查询吧,发送请求查询的请求吧,发送查询请求去查了,这样吗?那你后台要提供CTRL来处理了,知道吗?那我先写这个,我先写这个地方发请求的吧,因为我这个写例子我也不先写后台代码了,我写例子我就先写前单了,在这里边大家向后台发一个查询的请求,这个请求大家想想同步的是异步的。是不是异步的,因为响应回来之后,是不是需要那么一个什么中括号阶线字串啊,所以是个异步请求,那是个异步请求,在这直接发就行了,那直接发Dollar for叫什么阿加格字这样吧,在这呢传了一个对象知道吧,这个对象那个URL,一会儿我要在后台提供一个CTRL去查询所有的客户名字去知道吧,然后呢,这个URL我现在先用着,一会儿我选择CTRL就给他分配这个URL就行了。
57:18
知道吗?然后呢,这个URL那一会我给他写到哪呢?就写到交易的那个CTRL里边去,这个crler我就写到那个交易controlrl,那所以说这个URL我就跟那个交易的controltrl那些URL那些路径保持一致就行了,交易的CTRL那些路径是什么路径?对,Work奔驰下边叫什么?对,传三个下边的是不是资源名称啊,资源名称肯定跟方法名一样,我一会定义那个方法,我准备就定义这个方法叫什么,叫query,叫all客户的名字all customer name,然后呢,标注一会儿我就写这么一个controll就行了。知道吧,我现在先用着,现在先不写,现在先用着它,然后呢,大看这个地方知吧,这个地方大哥是不是要向后口端发请求,有参数吗?查所有的客户名字,暂时现在先没有是不是这样的,暂时因为查所有的客户名字,把所有客户名字以这种中框的形式访问前面暂时没没有这个data我就可以不写,然后呢,再往下写什么type,叫什么post是吧,然后呢,继续来还有什么贝塔type,然后呢,这个地方来个叫什么杰森,是不是这样的,那这个杰森是个什么样的,就是我们说我们将来在后台就是把所有客户的名字以这种监信自如设的形式访问到前来。
58:42
怎么返回?你先别管我,一会儿就这么返回,知道吗?那是个杰森,然后返回完了之后怎么办呢?是不是处理响应了,处理响应叫斯在这里边,那就定一个data接收响应信息,这个响应信息就这么一个阶层,有所有的客户的名字组成的这么一个阶层。
59:06
当然有多少个客户你在都是列到这里,这是一个阶森,然后拿到这个杰森之后干什么呢?最终要要要让他实现自动补全,你得把你这个数据源复制给这个属性,大家明白这意思吧,得复制给他,怎么复制给他。得调这个参数。那怎么调这个参数,这个参数本身是个函数。这个函数在哪儿定义的,在他这个开发包里边定义的。它的作用是什么?就是把这么一个数据源复制给这个搜索,复制它给它干什么,它就能够根据关键字到这个数据源里面去模糊匹配去了,把所有匹配到的都列到那个列边去了,就这个意思知道吧,所以说大看下边我们就要调用这个这个参数,然后那说老师这个参数怎么函数怎么能是参数呢?我说在GS里边可以,它是个什么,这个参数本身是个函数。
60:08
是个函数,函数是个函数,这个函数是作用是什么,这个函数能够将什么将一个这么一个类型的一个字符串接森字符串赋值给赋值给谁,赋值给搜索复制给烧死赋给他干什么?S就可以根据关键词到这个什么字符串里边,到这个数组里边去匹配去了,模糊匹配去了。从而完成自动补权,从而完成自动补权懂白吗?所以调这个函数就行了,如何调这个函数对直接带一个小括号对,然后把data塔给他,他就会把这个什么综上复制给他了,他怎么复值的你不用管,这是框架帮你做,这样的话,大概这个前台我就做好了。
61:02
它在这个里边,每次输入关键,每次加满的话,你都会自动触发这个函数。然后呢,我们都到后台去查,查完了之后得到这么一个字符串。所有客户的名字组成一个字符串。然后返回到前门,返回到之后,然后交给他使用,这样就能实现自动不行了,这样的话这个数据源就是动态的。好,这是我们说的这样,然后呢,大家看那这个地方呢,这个前台小了,前台小了,这个CTRL我没没没写呢,没写干什么,下边提供这个ctrler,这个controller,就是他接收到请求之后,去调service,调map,去查询所有的客户名字。然后以阶字符TRL的CTRL往回发,所以那我就写这个CTRL,写这CTRL在这个CTRL里边去知道吧,然后写它的话,那我就直接。
我来说两句