struts2中s:iterator 标签的使用详解 及 OGNL用法 (转载)

    技术2025-03-20  20

    简单 demo s:iterator  标签 3 个属性: value :被迭代的集合 id    :指定集合里面的元素的 id status  迭代元素的索引 1:jsp 面定 元素写法   list

    <s:iterator value="{'1','2','3','4','5'}" id='number'>  <s:property value='number'/>A  </s:iterator>  打印 : 1A2A3A4A5A 2: 索引的用法 如果指定了 status 次的迭代数据都有 IteratorStatus 例,它有以下几个方法 int getCount() 返回当前迭代了几个元素 int getIndex() 返回当前元素索引 boolean isEven() 当然的索引是否偶数 boolean isFirst() 当前是否第一个元素 boolean isLast() boolean isOdd() 当前元素索引是否奇数 <s:iterator value="{'a','b','c'}" id='char' status='st'>  <s:if test="#st.Even">  在的索引是奇数 :<s:property value='#st.index'/>  </s:if>  当前元素 <s:property value='char'/>  </s:iterator>  3 :遍 map value 可以直接定 义为 value="#{"1":"a","2":"b"}"  个元素以都好隔 。元素之 key value  冒号隔 value 也可以是数据 里面的 java.util.Map 写法如下: <s:iterator value="map" id="id" status="st">  key : <s:property value='key'/>  value:<s:property vlaue='value'/>  </s:iterator>  当然 key  value  都可以使 java    Object 3 :遍 数据 . 简单 List List<Attr>  class Attr{String attrName;String getAttrName(){return "123";}} <s:iterator value="label" id="id">  <s:property value="#id.attrName" />  </s:iterator>  当然 value  可以写成   value="%{label}" label 可以有 . 操作 label 的属性 List  可以写成 value="%{label.list}"  相当于: getLabel().getList(); 4 :遍 2 list List<AttrName> attrN {color,size,style} List<AttrValue> attrV {red,20,gay} 2 list 的元素是一一 对应 的,一个 attrN 对应 一个 attrV <s:iterator value="%{attrN }" id="id"   status="status">  index    is : <s:property value='status.index'/>  attrName is : <s:property value='id'/> or <s:property value='%{id}'/>  attrName is : <s:property value='%{attrV[#status.index]}'/>  </s:iterator>  <s:bean name="org.apache.struts2.util.Counter" id="counter"> <s:param name="first" value="5" /> <s:param name="last" value="10" /> <s:iterator> counter:<s:property/> </s:iterator> </s:bean>

     

     

     

     

     

    标签 主要的的作用就是迭代出集合。。   value 属性表示需要跌代 示出来的   status 属性,又来保存迭代 的一些状 态值   注:   1. 如果需要引用 valueStack 中的 ,需要使用 这样 的形式。   <s:iterator value="#userList" /> //userList action 部分被保存在 Request 中,所以使用 # 加属性名来引用   2. 如果集合的 是通 action 的方法,假 action 中有一个 getListMenu 方法,返回一个 List 集合。   可以使用如下的形式来引用 个集合,并用 s:iterator 出。   <s:iterator value="listMenu" />  3.iterator value 使用定 好的方式,如:   <s:iterator value="{1,2,3,4}" />         // 这样 跌代 出的 就是 1.2.3 .4 四个   二、 iterator 出具体 ,如果,在上面我 list 中的 象,有两个属性,都是 String 型,一个是 name, 一个是 url   可以 这样 来引用。   1.      <s:property value="name" />       // 这样 将可以 出跌代 象的 name 属性   2.       如果我 希望使用 <s:url /> 来将跳 转过 后的 url 理, 如何来做?             <s:url value="%{url}"/>            //%{}ognl 的表达式, 这样 url 值进 <s:url/>             实际 上就是 转为绝对 路径。 这样 ,我 就可以 付一些因跳 转换产 生的路径 问题        原因:因 <s:iteratotr /> 以后,当前的 应该 就在 ValueStack 部了, 这样 当然的 url 实际 上就是 象的 url           属性了   三、使用 ognl 对应   <s:textfield name="loginName" value="%{#request.loginNames}"/>  使用此表达式,会生成一个文本框,并且,如果 request.attribute 中有 loginNames 属性,将会做 些文本框的默 认值   如果只使用 #request.loginNames struts2 标签 内部,是不会 示任何 的,注意外面加上的 %{} 附号,才会被正常的使用。   如果希望如 EL 言一 直接 出文件,如在一个 <a></a> innerHTML 文本 #request.loginNames ,我 只要使用: <s:property value="#request.loginNames" /> 使可以正常使用!   注:   1.${} EL 言的   %{} 这样 的形式是 ognl 言的,在 struts2 标签 内部,使用 %{} 这样 的形式,在 标签 外部可以使用 ${}EL 言的方式。如果在 struts2 标签 内部使用 ${} 这样 的方式,会出 以下的 错误 提示:   According to TLD or attribute directive in tag file, attribute value does not accept any expressions  2. 很多 候,我 使用 struts2 的一些 标签 ,属性是需要接受集合的,如果集合是保存在 request,session ,或者是 值栈 ( 非根 象的 栈顶 ) ,可以使用 # 量名的方式,如果 取的 是在 Action 中通 特定的方法来 取,就需要使用如   value="userList" 这样 的方式,只是去掉了前面的 #

     

    struts2 中的 OGNL 用法

    User 象属性 User 中有 username password 字段 username 属性 <s:property value="user.username" /> password 属性 <s:property value="user.password" /> User 中又包含定 address 象, address 象中包含有 addr 属性, 可以 这样访问 addr 属性 <s:property value="user.address.addr" /> User 包含一个 get() 的普通方法,可以 这样调 <s:property value="user.get()" /> 以上是 值栈 象的普通方法, user 为值栈 中的 action 中的静 方法 get() ,普通方法不能直接 <s:property value="@com.netshuai.action.ManagerAction@get()" /> 以上 为调 用非 值栈 中的静 方法 JDK 的静 方法 <s:property value="@java.lang.Math@floor(32.56)" /> 上例也可写成 <s:property value="@@floor(32.56)" /> ,省略前面的 类则 使用 java.lang.Math ,其他 不可省略 用普通 中的静 属性 <s:property value="@com.netshuai.model.Address@city" /> address 中的 city 属性要用 public 声明 用普通 的构造方法,如构造方法 public User(String username) {       this.username=username; } 用方法 <s:property value="new com.netshuai.model.User('hello').username" /> 返回 username 值为 hello List<s:property value="list" /> List 中的某一个元素 <s:property value="list[0]" /> List 的大小 <s:property value="list.size" /> Set<s:property value="set" /> 无法 Set 中的某一个元素,因 Set 没有 Map<s:property value="map" /> Map 中所有 key <s:property value="map.keys" /> Map 中所有 value <s:property value="map.values" /> Map 中的某一个元素 <s:property value="map['k1']" /> List 所有 <s:property value="listObject" /> ,需要重写 toString() 方法才能正常 象的   利用投影 List 中所有 象的 username 属性 <s:property value="listObject.{username}" /> 利用投影 List 中第一个 象的 username 属性 <s:property value="listObject.{username}[0]" /> 利用 选择获 List 中年 大于 30 <s:property value="listObject.{?#this.age>30}" /> 利用 选择获 List 中年 大于 30 象的 username<s:property value="listObject.{?#this.age>30}.{username}" />   选择获 List 中年 大于 30 的第一个 象的 username<s:property value="listObject.{?#this.age>30}.{username}[0]" /> <s:property value="listObject.{^#this.age>30}.{username}" /> 利用 选择获 List 中年 大于 30 的最后一个 象的 username<s:property value="listObject.{$#this.age>30}.{username}" /> parameters 中的属性 <s:property value="#parameters.name" /> request 中的属性 <s:property value="#request.name" /> session 中的属性 <s:property value="#session.name" /> application 中的属性 <s:property value="#application.name" /> <s:property value="#attr.name" /> 序遍 上面四个 象,然后返回首先找到的 %{} 可以取出存在 中的 Action 象,直接 用它的方法,如 %{getText('key')} 可以取出国 化信息 ${} 可以用在国 源文件中和 struts2 配置文件中 使用 top 值栈 中第二个 <s:property value="[1].top.user"/> 使用 top 值栈 中第二个 象的属性 <s:property value="[1].user"/> 值栈 action 的静 方法 get()<s:property value="@vs@get()"/> vs 也可写做 vs1 值栈 中第二个 action 的静 方法 get()<s:property value="@vs2@get()"/> 将一个 象放入 值栈 ActionContext.getContext().getValueStack().push(user);

    最新回复(0)