还是继续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