struct2 标签

还是继续struts吧,还是那句话,应付的知识,专业人士请直接无视(最近有点不舒服啊,难道要病了?NND。。。。)

上个博文说道标签<%@taglib uro="/struts-tags" prefix="s"%> ,说到struts标签,就不能不说ognl表达式了, ognl,这名字多恐怖,其实也是个菜

<s:property value="name"/>

按照我们以前的思维,双引号里面应该是一个字符串,可是在struts标签里面不一样,双引号里面是一个 ognl 表达式,就是说,它不是一个字符串了,后面有例子说明

还是想下我们以前的项目,为了更好的结合以前的知识,我们想下一般在显示层我们要嵌套什么逻辑语句,最主要的还是循环输出,变量的定义运算比较吧,好,就说这几个了


回顾下上个博文的小内容

<s:property value="username"/>
取的是值栈中username的值,不专业的理解可以说是action的成员变量值,比如说action里面有一个private String name="hello"

那<s:property value="username"/>取的就是"hello"

那取Stack Context栈中的值就得加#,property标签还有个属性,escape

<s:property value="'<br>'" escape="true"/>
escape默认为false,如果是true,它就不会将这个property的值解释成html标签,上面的写法,就会输出<br>,而不会换行

细心的你一定发现了,上面这个property标签里的value有点不一样,上面说了,这个value不是去栈里面找东东么?你看,双引号里面加了单引号,就是告诉了它,我这个不是ognl表达式,你别乱折腾了,直接给我这个字符串就好了


来看我们怎么在result里面设置属性,看代码

<s:set var="test" value="username"/>
这个set标签就是把这个test变量压进了Stack Context栈,那怎样取呢?前面所说,用#啊!
<s:property value="#test"/>
前面我们说的ognl表达式,那test的值是什么呢?当然就是值栈里面username的值“hello”了,那想把test的值变成“username",用单引号啊!
<s:set var="test"  value="'username'"/>

那这个set设置,test会直接压进Stack context,但是我不想它压进stack context啊,那怎么办,然后就多了个scope属性了

<s:set var="test" value="'username'" scope="session"/>

那就会把test压进session里面了,那怎么取呢?简单
<s:property value="#seeion.test"/>

想不到用了struct,result里面还提供了bean的标签

<s:bean name="bean所在路径" var="beanName">
<s:parm name="bean的成员变量" value="'fuck'"></s:parm>
</s:bean>
注意必须要有个var,什么效果不深究了

这样子,就把beanName压进了stack context里面了,那怎样访问刚我们给它的成员变量设置的属性呢?用#啊!

<s:property value="#beanName.bean的成员变量"/>
(不晓得都分离了,还在result里面用bean做什么)

还有个include,放弃吧,马哥说有bug,不过我们说了ognl表达式为个单引号就转成字符串了,那字符串怎样转ognl呢?用%

<s:include value="%{#incPage}"></s:include>
值得注意的是,include 的value里面是字符串,不是ognl表达式,用了%就把{}里面的内容强行转成ognl表达式了,事实上是这样的,%会监控内容,如果是ognl表达式,不做什么,如果不是,它说强行转换ognl表达式,property标签也可以这样写
<s:property value="%{username}"/>
<s:property value="username"/>
是等价的


来吧,if else标签

<s:set var="age" value="userage"/>
<s:if boo="#age <0">
   do something
</s:if>
<s:else>
   do nothing
</s:else>
这个结束符合位置有点怪异啊,不过就这样写

来吧,遍历

<s:iterator value="{'aaa','bbb','ccc'}" var="x">
  <s:property value="#x.toUpperCase()"/>
</s:iterator>
这个遍历就是把集合里面的内容依次放进x里面,然后将x变大写,输出来,相信大家看到x是存放在stack栈里面了吧,因为用了#


好了,大致的知识点就这点了,还有些方法的其他属性,大家去查api文档,很详细,不多写了


2011/09/14   23:42


评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值