00:00
我们大家接触过的标签,大多数标签啊,除了具有标签体以外,还有什么,还有属性,你比如说这个标签。这就是属性啊,对不对。属性名,属性值。再比如说我们大家经常写的form表单。这个是不是它的属性啊。Method是不是它的属性啊,就是说我们自己定义的这个标签,能不能也给它添加上属性呢?当然可以。好,下面我们就再来写一个啊,拷贝仍然是拷贝。11。我们这个叫标签属性是吧,Tag a tree。
01:04
Yeah。太啊这儿。Tag attribute。好,我们先来说需求。我现在想实现一种什么样的效果呢?实现这种效果,大家看我这CT冒号。这来一个什么呢?衣哎,这来一个属性,比如就叫test吧,是吧。呃,这样,这个test里边我们。
02:01
放上这样一个东西,我们叫。没有吧,没有。或者说叫gender性别。如果这个金的性别是处。我们这儿就显示男。否则不显示。当。我这儿可以再来一个。再来一个什么note运算符,我们说过吧,是不是你也可以不加not,你可以加个非是吧?啊,如果它是。False j not是不是就是啊,那我这就显示女。那这俩肯定不会同时显示对吧,我就实现这样一个功能,当然这个金我们需要提前是不是先定义啊。
03:06
布尔直金得金nder是性别的意思啊。出注意要给它放到哪儿。放到玉里边啊,配件。Page contest点儿。Set attribute。金金。就实现这样一个功能。很简单。那好,那第一步是啥。那肯定是先定义。我们的标签处理器啊,来了标签处理器,呃,这个标签处理器class叫什么?我就叫if标签啊if。
04:05
Tag。需要继承子。Simple tag support。然后呢?重写do tag吧,是不是do tag?OK了。来吧写吧,这这这写写什么呢。这加了属性了呀,这个属性是不是叫test,这属性反映到。我们的标签处理器上,它是个什么?注意属性反映到标签处理器上是一个。属性还是一个属性,什么属性?Set属性?什么叫set属性?
05:07
这是个全员变量吗?成员变量,我给他再添加上什么。Set添加上sat。你看。填上set方法,那么它就变成了set属性了。诶,也就是说我们标签的。标签的属性。反应到。标签处理器类中。就是。一个。Set属性。
06:03
这个就叫set属性啊好。那这个就好写了,怎么了,你如果test是true。我是不是把标签体原样显示啊,获取标签体我们是不是已经会了呀。对不对,获取标签题已经会了啊,那写吧。获取签体。呃,如果。那我这要获取签体。然后呢?将标签体写入到。标准输出流,那也就是说,那先先来吧,获取标签体怎么获取。
07:06
这怎么获取了?是不是有个方法叫this.get JSP body是吧?JSP fragment吗?这是标签体有了。写入到标准输出流,那你要获取到标准输出流。这个gf.invoke。是吧,Out。那这个就写到标准输入流,那那之前我们是不是需要先获取到标准输入流啊。其实我就这样写了,标准枢流就直接写了啊this.get。GXP。Contest,这实际上就那个配contest呀,它里边是不是有get out OK了。
08:03
这就搞定了。这就搞定了。那我们的。这个if标签的标签处理器就定义好了,再下一步就简单了,注册。注册。咖啡。写吧。啊,这个叫什么,这个标签是什么if啊是不是。然后呢?这个就直接改了啊,我们这个就叫if tag。有没有标签体啊,有这个标签体里边你看看啊,这个标签体。这个男或者女,你是否支持?这个医药表达式,如果这里边你可以。
09:03
让他。支持药表达式,那这里边你就得需要使用是不是sc list,如果就是原样显示的话,我们是不是用它就可以了。对不对,我用它就可以了,你看。五用上它啊,用上它,我们一会儿看一下这个效果。那这些我就删掉了。注意写完了没有。没有,我们对于这个if标签的注册需要。把它的属性一块儿注册了属性。它里边有什么。有name。哎,你这个属性叫什么,我这个属性叫test。还有什么required?就是这个属性是否是必须的,我们现在是必须的,它这个布尔值true或者false是必须的,你不写就会报错。
10:10
再加上一个。这个东西。这个这个东西怎么这么乱呢。R tr value是吧,这什么呀。你看这儿。写的直,要么是yes,要么no,要么true,要么false,其实一个意思。这是干嘛的?我给你写个出它其实啊,看着有点乱,我告诉你是什么你就清楚了,这个RT是指的。Time。运行时EXPX。P。
11:01
Shit。Expression expression怎么写了呀?这个这个,哎,不错,是这样。Value。是什么?运行时表达式的值什么意思呢?这个属性如果是处的话,表示的意思是它支持。EL表达式若为,则支持,则该该该该属性的值。该属性的值支持。EL。与你注意这还有个什么JSP的表达式。
12:06
你要说bos falses就不支持。现在我们给他设置的这个属性test要求是必须的。然后呢,支持表达式的值。Okay。写完了,写完了,现在就能运行了。它现在就能运行了啊。那咱们这样让他跑一下。把这两个删掉了啊。你看这是不是出来男的,我给他改一下,这改成boss是不是应该出来女啊。
13:04
对不对,OK了。这个if标签我们就定义好了。通过这个标签让我们大家掌握什么?就是属性自定义标签里边属性是怎么定义的,如果有多个属性没事再来一个,那你在这儿再来一个什么相应的塞属性,这就OK了。不过在这儿啊,这段代码我们还可以进一步优化。你看。我把这给你注释掉,直接就写成一句话。直接就写成一句话啊,写成什么呢?this.get。gsp.invo是吧?
14:02
写成闹。看清楚了没有,我给你写成闹了。现在闹什么呀,你这是不是没没放东西啊,重新发布了啊。我现在。刷新。没问题吧?是不是我这给他改成处。有同学说你你这儿到底重新发布了没有。停掉。我们重启。服务器,这没问题吧。肯定重新发布了,是不是我现在改成处了啊。走。OK吧呀,那这这这怎么回事呢?这写个闹,这是什么意思呢。我们刚才看的这个JSP fragment啊,这个这个方法。这个invoke方法我们没把它读完。
15:01
我们就读到这儿了是吧,就读了这一句啊,说执行这个片段。然后呢?这不指向是吧,所有的输出流到你给出的writer,也就是说会把这个内容写到输出流里边。哦,或者。或者the JSP writer JSP writer。就这个呀,这里边儿这个out呀。Returned by the。Get out method。哎,这个JSP writer这个流啊,被返回了,通过什么get out这个方法被返回了,Off the JP content contest associated with the fragment,什么意思呢,和当前的。和这个GDP contest相关联的这个。
16:03
片段。的和这个,你你注意啊,是和这个。这个这个。和这个啊,片段相关联的,和片段相关联的这个JSP content。的这个get out的方法。会返回JSP writer这个对象。和当前的这个片段相关联的,就这个配contest。的get out的方法会返回。这样一个标准输出流。If out is now,如果你这填的是now的话,这儿就会有这样一个流,它是自动给的。所以。
17:00
如果我们这儿填的是闹,就意味着这儿就有标准输出流。所以这一句话就OK了。以下。代码。等价于。上面的是不是这俩是等价的啊,OK了。那就说到这里,哎,对,这还没说谁呢,这个,呃,不是这个,是这个。这个不是原样显示吗?你看着啊,我这儿。这不写男女了,我给你写个什么?这按理说啊,如果它是true,是不是就显示这个内容,这个内容是什么,要表达式,它是不是应该显示true啊,是true就应该显示出。
18:03
是不是,那好,你看看他会显示什么。重新发布了没有?这样吗?重启一下。看好这显示什么啊走。看到没,这就是原样显示,这就是原样显示,它不会把这个一二表达式给你解析了。但如果说你这不写tag dependent写谁list,也就是说这儿会解析一号表达式。好,重新启动。看好我这儿刷新。走。这是不是错了,他是不是对一要表达式进行解析了呀。
19:01
诶,这就是来我们在这儿把这这两这两个的区别啊,给大家再重新说一下。呃,当然这个情况你至至于你这写什么,你随便根据你自己的业务需求,另外啊,这。这儿我们说我看看是这儿还是。嗯。对,这儿它是不是还支持什么JSP表达式啊。支持JSP表达式,那也就是说啊,我们这儿。我还可以怎么写?我这还可以这样写。这个里边。我写她。这不是表达式吗?金?这也是可以的,但我这就改过来了啊,这还管上难。
20:08
Nine。呃,重新发布了没有。好看着啊。走。看到没?是不是两个为什么这是他输出的。也就是说这个是JSP表达式,它也是支持的啊,这也是支持的,当然这是谁的功劳啊,是不是这的功劳。Time expression value OK,就这。
我来说两句