struts2一些概念介绍和标签的使用

时间:2021-05-24 17:25:14

依赖注入

模块包含

struts.xml的模块包含格式

<include file="xx.xml" >

OGNL

对象导航语言   有个超大的好处就是根据对象访问属性,避免混乱。

OGNL标签分为:data tags和 control  tags

一、数据标签

property标签

获取值栈中的普通对象

<s:property   value=""/>

是访问哪些有get和set的属性的方法

name:<s:property value="name"/><br>
name:<s:property value="user.name"/><br>

访问值栈中的普通对象的普通方法

1.password是String类型

password:<s:property   value="password.length()"/><br>

2.实体类中自定义对象的普通方法

eat:<s:property   value="person.eat()"/><br>

3.Action类中定义的普通方法

<s:property   value="methodaction1()"/>

4.访问集合

1>array

和list一样

2> list

访问list

<s:property   value="listname"/>

访问list某个属性的集合

<s:property   value="listname.{age}"/>

访问list某个集合的某特定值

<s:property   value="listname.{age}[0]"/>或者

<s:property   value="listname[o].age"/>更容易理解和记忆

3>set

和list一样

4>map

访问map单个元素

<s:property   value="mapname.key"/>或者 <s:property   value="mapname['key']"/>  单引号

访问map所有key

<s:property   value="mapname.keys"/>

访问map所有value

<s:property   value="mapname.values"/>

访问容器的大小

<s:property   value="mapname.size()"/>或者  <s:property   value="mapname.size"/>

注:什么是普通方法和属性:就是非static的方法和非构造方法和属性

5.访问静态方法和和属性(需要改设置)

<constant name="struts.ognl.allowStaticMethodAccess" value="true"></constant>struts.xml中修改

<s:property   value="@全类名@方法或属性"/>

6.投影

users为set集合

<s:property   value="users.{?#this.age==1}.{0}"/>

<s:property   value="users.{^#this.age>1}.{age}"/>  age大于1集合中的第一个元素

<s:property   value="users.{$#this.age>1}.{age}"/>  age大于1集合中的第后一个元素

<s:property   value="users.{$#this.age==1}.{age}==null"/> 判断集合是否为空

两者都可以但是第二个更明确。

name:<s:property value="name"/><br>
name:<s:property value="user.name"/><br>

set标签

<s:set var=""   value=""/>  value的type为object,可以用来重命名

如:在浏览器中地址栏中输入...&age=-8

<s:set var="age"   value="#parameters.age[0]"/>

<s:if test="#age<0">wrong yong!</s:if>

  1. <s:set var=”includepage” value=”'/index.html'” />
  2. <s:property value=”#includepage” />
  3. <s:include  value="#includepage"  />     include标签value的type是字符串类型,"#includepage" 在解析的时候会被解析成字符串
  4. <s:include  value="%{#includepage}"  />这一个加上%{}就会被当做ognl表达式

二、控制标签

if标签

<s:if test=""></s:if>  test的type是布尔型 boolean

iterator标签

遍历集合:
<s:iterator value="{'1','2','3'}">
<s:property/>
</s:iterator>
<br>
自定义变量:
<s:iterator value="{'aa','bb','cc'}" var="w">
<s:property value="#w.toUpperCase()"/>
</s:iterator>
<br>
遍历map
<s:iterator value="#{'a':'A','b':'B','c':'C'}">
<s:property value="key"/>|<s:property value="value"/>
</s:iterator>

使用status

使用status <br>
<s:iterator value="{'aa','bb','cc'}" status="status">
<s:property/>
遍历过的总数:<s:property value="#status.count"/><br>
当前遍历的的索引位置:<s:property value="#status.index"/><br>
当前是奇数?:<s:property value="#status.even"/><br>
当前是偶数?:<s:property value="#status.odd"/><br>
当前是第一个元素?:<s:property value="#status.firt"/><br>
当前是最后一个元素?:<s:property value="#status.last"/>
<hr>
</s:iterator>

subset标签

注:从例子可以看出定义list和map的差别

相关文章