Struts2 OGNL表达式的iterator标签使用详解

好记性不如赖笔头…………

OGNL 的iterator迭代器详解

 s:iterator标签属性
        value:必填,值为OGNL表达式,要操作的数据集
        
        var : 当前遍历数据的别名
                当使用了此属性后:var的值做为KEY,当前遍历的数据做为value,存储到contextMap中,访问方法:#别名.属性
                当不使用此属性后:当前遍历的数据压到valueStack栈顶中,在使用后弹出。访问方法:属性名
                
        status:遍历时的计数信息,访问格式:#status名称.方法
                int index:返回当前遍历数据的索引,从0开始
                int count:返回当前遍历数据的位置,从1开始
                boolean first:是否是第一个数据
                boolean last: 是否是最后一条数据
                boolean odd: 当前元素索引是否奇数
                boolean even:当前元素是否为偶数
                
        begin:起始遍历数据的索引
        step:  步长,默认为1
        end:      最后一个遍历数据的索引

1、创建Persion.java实体类,具体代码如下:

package com.ckinghan.bean;

public class Persion {

    private String nature;

    private int age;

    public Persion() {
        super();
    }

    public Persion(String nature, int age) {
        super();
        this.nature = nature;
        this.age = age;
    }

    public String getNature() {
        return nature;
    }

    public void setNature(String nature) {
        this.nature = nature;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }




}

2、创建IteratorAction动作类(在此之前,请先将Struts2需要的包先导入进去),继承ActionSupport,具体代码如下

package com.ckinghan.web.action;


import java.util.ArrayList;

import com.ckinghan.bean.Persion;
import com.opensymphony.xwork2.ActionSupport;

public class IteratorAction extends ActionSupport {

    private java.util.List<Persion> persions = new ArrayList<Persion>();



    public java.util.List<Persion> getPersions() {
        return persions;
    }


    public void setPersions(java.util.List<Persion> persions) {
        this.persions = persions;
    }


    @Override
    public String execute() throws Exception {

        persions.add(new Persion("黄色", 15));
        persions.add(new Persion("红色", 19));
        persions.add(new Persion("蓝色", 11));
        persions.add(new Persion("橙色", 18));
        persions.add(new Persion("赤色", 17));
        persions.add(new Persion("紫色", 16));
        persions.add(new Persion("绿色", 10));

        return super.execute();
    }

}

3、配置Struts.xml配置文件,存储在src目录下,Struts.xml具体内容如下:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
    <!--开启调试模式-->
    <constant name="struts.devMode" value="true"/>

    <package name="iterator" extends="struts-default">

        <action name="iterator" class="com.ckinghan.web.action.IteratorAction" method="execute">
            <!--成功返回iterator视图-->
            <result>/iterator.jsp</result>
        </action>
    </package>

</struts>

4、创建iterator.jsp文件,具体代码如下:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">

    <title>OGNL-iterator迭代器遍历</title>

    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
  </head>

  <body>
   <hr>
   <h1>OGNL-iterator迭代器标签遍历数据,使用var</h1>
   <table border="1" align="center">
        <thead>
            <tr>
                <th>索引</th>
                <th>编号</th>
                <th>颜色</th>
                <th>数量</th>
                <th>是否第一条</th>
                <th>是否最后一条</th>
                <th>是否奇数</th>
                <th>是否偶数</th>
            </tr>
        </thead>
        <%--
            OGNL 的iterator迭代器详解
            s:iterator标签属性
                    value:必填,值为OGNL表达式,要操作的数据集

                    var : 当前遍历数据的别名
                            当使用了此属性后:var的值做为KEY,当前遍历的数据做为value,存储到contextMap中,访问方法:#别名.属性
                            当不使用此属性后:当前遍历的数据压到valueStack栈顶中,在使用后弹出。访问方法:属性名

                    status:遍历时的计数信息,访问格式:#status名称.方法
                            int index:返回当前遍历数据的索引,从0开始
                            int count:返回当前遍历数据的位置,从1开始
                            boolean first:是否是第一个数据
                            boolean last: 是否是最后一条数据
                            boolean odd: 当前元素索引是否奇数
                            boolean even:当前元素是否为偶数

                    begin:起始遍历数据的索引
                    step:  步长,默认为1
                    end:      最后一个遍历数据的索引
         --%>
        <s:iterator value="persions" var="vs" status="l"  >
            <tr>
                <td>
                    <s:property value="#l.index"/>
                </td>
                <td>
                    <s:property value="#l.count"/>
                </td>
                <td>
                    <s:property value="#vs.nature"/>
                </td>
                <td>
                    <s:property value="#vs.age"/>
                </td>
                <td>
                    <s:property value="#l.first"/>
                </td>
                <td>
                    <s:property value="#l.last"/>
                </td>
                <td>
                    <s:property value="#l.odd"/>
                </td>
                <td>
                    <s:property value="#l.even"/>
                </td>
            </tr>
        </s:iterator>
   </table>

   <hr>
   <h1>OGNL-iterator迭代器标签遍历数据,不使用var</h1>
   <table border="1" align="center">
        <thead>
            <tr>
                <th>索引</th>
                <th>编号</th>
                <th>颜色</th>
                <th>数量</th>
                <th>是否第一条</th>
                <th>是否最后一条</th>
                <th>是否奇数</th>
                <th>是否偶数</th>
            </tr>
        </thead>
        <s:iterator value="persions"  status="l" >
            <tr>
                <td>
                    <s:property value="#l.index"/>
                </td>
                <td>
                    <s:property value="#l.count"/>
                </td>
                <td>
                    <s:property value="nature"/>
                </td>
                <td>
                    <s:property value="age"/>
                </td>
                <td>
                    <s:property value="#l.first"/>
                </td>
                <td>
                    <s:property value="#l.last"/>
                </td>
                <td>
                    <s:property value="#l.odd"/>
                </td>
                <td>
                    <s:property value="#l.even"/>
                </td>
            </tr>
        </s:iterator>
   </table>
  </body>
</html>

访问结果如下:

这里写图片描述


OGNL表达式:s:set标签

将var做为key,value做为value存储到contextMap中,注意,只能保存到contextMap的大Map中
注意:value的值是一个OGNL表达式,如果想让值变成字符串,将值写入到”号中

    <!--将"你好"做为value,将“hello”做为key,存储到contextMap中-->
    <s:set var="hello" value="'你好'"></s:set>
    <!--先从ValueStack查找名为hello的数据,找不到再去ContextMap中找-->
    <s:property value="hello"/>

结果如下:

    hello

s:action标签:通过name确定动作,executeResult来确定是否执行此动作,这个功能主要是实现动态包含
name属性:动作名称
executeResult:是否执行,当值为true时,执行动作,当值为false时,不执行,默认false

<s:action name="getValueStack1" executeResult="true"/>

以上代码,将在页面加载时加载getValueStack1的动作,将此动作返回的数据显示当前页面上,等同于将getValueStack1的返回数据放到了当前页面

OGNL的判断标签:

s:if标签—》s:elseif标签—》s:else标签

    <s:set var="hello" value="'hello1'"/>
   <s:if test="#hello == '你好'">if标签</s:if>
   <s:elseif test="#hello !='hello1'">elseif标签</s:elseif>
   <s:else>else标签</s:else>

结果如下:

    elseif标签

OGNL的URL标签:
s:url标签   单独一个action属性,会将项目名及动作路径输出

<s:url action="getValueStack"/>

结果如下:

/Struts2_OGNL/getvalueStack.action


=====================================================================================
当加入了var属性后,var做为key,action的值做为value,存储到contextMap中,如果加了id属性,可以直接配合s:a标签通过%{id}来调用,以达到连接跳转的目的

    <s:url action="getValueStack1" var="url" id="url">
        <!--添加跳转连接中的参数,相当于get方式参数拼接-->
        <s:param name="hello">hello</s:param>
    </s:url>

<a href="<s:property value='#url'/>">我跳啊跳</a>
<s:a href="%{url}">我使劲跳</s:a>

访问结果如下:

这里写图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值