三、OGNL配合通用标签的其他使用
1、iterator标签(很重要)
动作类
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 package com.itheima.web.action; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 6 import com.itheima.domain.Student; 7 import com.opensymphony.xwork2.ActionSupport; 8 /** 9 * s:iterator标签的使用 10 * @author zhy 11 * 12 */ 13 public class Demo4Action extends ActionSupport { 14 //Action动作类的引用,默认情况下就在ValueStack的栈顶 15 private List<Student> students; 16 17 public String findAll(){ 18 //调用service层的方法,List findAllStudent() 19 students = new ArrayList<Student>(); 20 students.add(new Student("吖吖",23)); 21 students.add(new Student("北半球",24)); 22 students.add(new Student(萨芬",21)); 23 return SUCCESS; 24 } 25 26 public List<Student> getStudents() { 27 return students; 28 } 29 30 public void setStudents(List<Student> students) { 31 this.students = students; 32 } 33 34 35 }
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 2 <%@ taglib uri="/struts-tags" prefix="s" %> 3 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 4 <html> 5 <head> 6 <title>s:iterator的使用</title> 7 </head> 8 <body> 9 <table width="500px" border="1" align="center"> 10 <tr> 11 <th>序号</th> 12 <th>姓名</th> 13 <th>年龄</th> 14 </tr> 15 <%--s:iterator:struts2的迭代标签 16 属性详解: 17 begin,end,step和jstl的forEach标签是一样的 18 value属性:要遍历的集合,是OGNL表达式。 19 var属性:取值就是一个字符串 20 如果写了该属性:把var的值作为key,把当前遍历的元素作为value。存到ActionContext这个大Map中 21 如果不写该属性:把当前遍历的元素压入栈顶 22 status属性:遍历时的一些计数信息。 23 int getIndex() 从0开始 24 int getCount() 从1开始 25 boolean isFirst() 26 boolean isLast() 27 boolean isOdd() 28 boolean isEven() 29 --%> 30 <s:iterator value="students" var="s" status="vs" > 31 <tr> 32 <td><s:property value="#vs.index"/></td> 33 <td><s:property value="#s.name" /></td> 34 <td><s:property value="#s.age" /></td> 35 </tr> 36 </s:iterator> 37 </table> 38 <hr/> 39 <table width="500px" border="1" align="center"> 40 <tr> 41 <th>序号</th> 42 <th>姓名</th> 43 <th>年龄</th> 44 </tr> 45 <s:iterator value="students" status="vs"> 46 <tr> 47 <td><s:property value="#vs.count"/></td> 48 <td><s:property value="name" /></td> 49 <td><s:property value="age" /></td> 50 </tr> 51 </s:iterator> 52 </table>
2、OGNL投影(了解)
2.1、使用过滤条件投影
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 <%--OGNL的投影:(以下内容全是了解)添加过滤条件 2 a.“?#”:过滤所有符合条件的集合,如:users.{?#this.age > 19} 3 b.“^#”:过滤第一个符合条件的元素,如:users.{^#this.age > 19} 4 c.“$#”:过滤最后一个符合条件的元素,如:users.{$#this.age > 19} 5 --%> 6 <hr/> 7 <table width="500px" border="1" align="center"> 8 <tr> 9 <th>序号</th> 10 <th>姓名</th> 11 <th>年龄</th> 12 </tr> 13 <s:iterator value="students.{?#this.age>21}" status="vs"> 14 <tr> 15 <td><s:property value="#vs.count"/></td> 16 <td><s:property value="name" /></td> 17 <td><s:property value="age" /></td> 18 </tr> 19 </s:iterator> 20 </table>
2.2、投影指定属性
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 <%--OGNL的投影:指定输出内容 2 students.{name}========{"name1","name2","name3"} 3 --%> 4 <hr/> 5 <table width="500px" border="1" align="center"> 6 <tr> 7 <th>序号</th> 8 <th>姓名</th> 9 <th>年龄</th> 10 </tr> 11 <s:iterator value="students.{name}" status="vs" > 12 <tr> 13 <td><s:property value="#vs.count"/></td> 14 <td><s:property /></td> 15 <td><s:property /></td> 16 </tr> 17 </s:iterator> 18 </table>
3、Struts2中#,$,%符号的使用(重要)
3.1、#
a、取contextMap中key时使用,例如<s:property value="#name" />
b、OGNL中创建Map对象时使用,例如:<s:radio list="#{'male':'男','female':'女'}" />
3.2、$
a、在JSP中使用EL表达式时使用,例如${name}
b、在xml配置文件中,编写OGNL表达式时使用,例如文件下载时,文件名编码。
struts.xml——>${@java.net.URLEncoder.encode(filename)}
3.3、%
在struts2中,有些标签的value属性取值就是一个OGNL表达式,例如<s:property value="OGNL Expression" />
还有一部分标签,value属性的取值就是普通字 符串,例如<s:textfield value="username"/>,如果想把一个普通的字符串强制看成时OGNL,就需要使用%{}把字符串套起来。
例如<s:textfield value="%{username}"/>。当然在<s:property value="%{OGNL Expression}" />也可以使用,但不会这么用。
4、其他标签
4.1、set标签
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 <br/>-------s:set------------<br/> 2 <%--s:set标签 3 value属性:取值是一个OGNL表达式 4 var属性:是一个普通的字符串 5 它是把value属性的值作为value,把var属性的值作为key,把存到ActionContext大map中。 6 --%> 7 <s:set value="'test'" var="str1"/>
4.2、action标签
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 <br/>-------s:action------------<br/> 2 <%--s:action标签 : 3 name属性是指定一个action动作名称。它并不会真的去执行。 4 executeResult属性指定的是:是否执行action。取值是true/false。默认值:false 5 --%> 6 <s:action name="action1" executeResult="true"/>
4.3、if标签,elseif标签 else标签
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 <br/>-------s:if s:ifelse s:else------------<br/> 2 <%-- 条件判断的标签--%> 3 <s:set value="'S'" var="grade"/> 4 <s:if test="#grade=='D'">差</s:if> 5 <s:elseif test="#grade=='C'">中</s:elseif> 6 <s:else>其他,看着办吧</s:else>
4.4、url和a标签(很有用)
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 <br/>-------s:url------------<br/> 2 <%--s:url标签: 3 value属性:是把值直接输出到页面上 4 action属性:是把动作的请求地址输出到页面上 ${pageContext.request.contextPath}/action1 5 var属性:把action的取值作为value,把var的取值作为key,放到ActionContext中 6 注意:它会自动根据struts配置,来转换后缀名。 7 --%> 8 <s:url value="action1"/> 9 <s:url action="action1" var="url" > 10 <%--把name作为key,把value作为值,绑定到请求连接地址后面。相当于get方式拼接请求参数 11 注意: 12 name的取值就是一个普通的字符串 13 value的取值是一个OGNL表达式,要想转成字符串请使用'' 14 --%> 15 <s:param name="name" value="'张三'"></s:param> 16 </s:url> 17 <br/> 18 <a href="${pageContext.request.contextPath}/action1">来吧 page context</a><br/>
<s:a action="action1" >
<s:param name="username" value="'yiaiy'" /> go to page
</s:a>