您的位置:首页 > 编程语言 > Java开发

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

2017-09-06 13:24 836 查看
好记性不如赖笔头…………

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>


访问结果如下:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息