三、OGNL配合通用标签的其他使用

1、iterator标签(很重要)

动作类

 package com.itheima.web.action;

 import java.util.ArrayList;
import java.util.List; import com.itheima.domain.Student;
import com.opensymphony.xwork2.ActionSupport;
/**
* s:iterator标签的使用
* @author zhy
*
*/
public class Demo4Action extends ActionSupport {
//Action动作类的引用,默认情况下就在ValueStack的栈顶
private List<Student> students; public String findAll(){
//调用service层的方法,List findAllStudent()
students = new ArrayList<Student>();
students.add(new Student("吖吖",23));
students.add(new Student("北半球",24));
students.add(new Student(萨芬",21));
return SUCCESS;
} public List<Student> getStudents() {
return students;
} public void setStudents(List<Student> students) {
this.students = students;
} }

DemoAction4.java

 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>s:iterator的使用</title>
</head>
<body>
<table width="500px" border="1" align="center">
<tr>
<th>序号</th>
<th>姓名</th>
<th>年龄</th>
</tr>
<%--s:iterator:struts2的迭代标签
属性详解:
begin,end,step和jstl的forEach标签是一样的
value属性:要遍历的集合,是OGNL表达式。
var属性:取值就是一个字符串
如果写了该属性:把var的值作为key,把当前遍历的元素作为value。存到ActionContext这个大Map中
如果不写该属性:把当前遍历的元素压入栈顶
status属性:遍历时的一些计数信息。
int getIndex() 从0开始
int getCount() 从1开始
boolean isFirst()
boolean isLast()
boolean isOdd()
boolean isEven()
--%>
<s:iterator value="students" var="s" status="vs" >
<tr>
<td><s:property value="#vs.index"/></td>
<td><s:property value="#s.name" /></td>
<td><s:property value="#s.age" /></td>
</tr>
</s:iterator>
</table>
<hr/>
<table width="500px" border="1" align="center">
<tr>
<th>序号</th>
<th>姓名</th>
<th>年龄</th>
</tr>
<s:iterator value="students" status="vs">
<tr>
<td><s:property value="#vs.count"/></td>
<td><s:property value="name" /></td>
<td><s:property value="age" /></td>
</tr>
</s:iterator>
</table>

jsp

2、OGNL投影(了解)

2.1、使用过滤条件投影

     <%--OGNL的投影:(以下内容全是了解)添加过滤条件
a.“?#”:过滤所有符合条件的集合,如:users.{?#this.age > 19}  
b.“^#”:过滤第一个符合条件的元素,如:users.{^#this.age > 19}   
c.“$#”:过滤最后一个符合条件的元素,如:users.{$#this.age > 19}
--%>
<hr/>
<table width="500px" border="1" align="center">
<tr>
<th>序号</th>
<th>姓名</th>
<th>年龄</th>
</tr>
<s:iterator value="students.{?#this.age>21}" status="vs">
<tr>
<td><s:property value="#vs.count"/></td>
<td><s:property value="name" /></td>
<td><s:property value="age" /></td>
</tr>
</s:iterator>
</table>

jsp

2.2、投影指定属性

 <%--OGNL的投影:指定输出内容
students.{name}========{"name1","name2","name3"}
--%>
<hr/>
<table width="500px" border="1" align="center">
<tr>
<th>序号</th>
<th>姓名</th>
<th>年龄</th>
</tr>
<s:iterator value="students.{name}" status="vs" >
<tr>
<td><s:property value="#vs.count"/></td>
<td><s:property /></td>
<td><s:property /></td>
</tr>
</s:iterator>
</table>

jsp

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标签

     <br/>-------s:set------------<br/>
<%--s:set标签
value属性:取值是一个OGNL表达式
var属性:是一个普通的字符串
它是把value属性的值作为value,把var属性的值作为key,把存到ActionContext大map中。
--%>
<s:set value="'test'" var="str1"/>

4.2、action标签

 <br/>-------s:action------------<br/>
<%--s:action标签 :
name属性是指定一个action动作名称。它并不会真的去执行。
executeResult属性指定的是:是否执行action。取值是true/false。默认值:false
--%>
<s:action name="action1" executeResult="true"/>

4.3、if标签,elseif标签 else标签

 <br/>-------s:if s:ifelse s:else------------<br/>
<%-- 条件判断的标签--%>
<s:set value="'S'" var="grade"/>
<s:if test="#grade=='D'">差</s:if>
<s:elseif test="#grade=='C'">中</s:elseif>
<s:else>其他,看着办吧</s:else>

4.4、url和a标签(很有用)

     <br/>-------s:url------------<br/>
<%--s:url标签:
value属性:是把值直接输出到页面上
action属性:是把动作的请求地址输出到页面上 ${pageContext.request.contextPath}/action1
var属性:把action的取值作为value,把var的取值作为key,放到ActionContext中
注意:它会自动根据struts配置,来转换后缀名。
--%>
<s:url value="action1"/>
<s:url action="action1" var="url" >
<%--把name作为key,把value作为值,绑定到请求连接地址后面。相当于get方式拼接请求参数
注意:
name的取值就是一个普通的字符串
value的取值是一个OGNL表达式,要想转成字符串请使用''
--%>
<s:param name="name" value="'张三'"></s:param>
</s:url>
<br/>
<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>

struts2 OGNL配和通用标签和其它标签的使用的更多相关文章

  1. 【web开发学习笔记】Struts-Tags学习笔记1 - 通用标签和控制标签

    通用标签和控制标签 第一部分.代码 //前端 <html> <head> <meta http-equiv="Content-Type" conten ...

  2. Struts2 OGNL表达式、ValueStack

    OGNL简介 OGNL,即Object-Graph Navigation Language,对象视图导航语言,是一种数据访问语言,比EL表达式更加强大: EL只能从11个内置对象中取值,且只能获取属性 ...

  3. Struts2(Ognl)

    OGNL(Object-Graph Navigation Language)全称为对象图导航语言,是一种功能强大的表达式语言,它通过简单一致的语法,可以任意存取对象的属性或者调用对象的方法,能够遍历整 ...

  4. [原创]java WEB学习笔记61:Struts2学习之路--通用标签 property,uri,param,set,push,if-else,itertor,sort,date,a标签等

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  5. 【Java EE 学习 36】【struts2】【struts2系统验证】【struts2 ognl值栈】【struts2 ongl标签】【struts2 UI标签】【struts2模型驱动和令牌机制】

    一.struts2系统验证 1.基于struts2系统验证的方式实际上就是通过配置xml文件的方式达到验证的目的. 2.实际上系统校验的方法和手工校验的方法在底层的基本实现是相同的.但是使用系统校验的 ...

  6. java struts2入门学习--OGNL语言常用符号和常用标签学习

    一.OGNL常用符号(接上一篇文章): 1.#号 1)<s:property value="#request.username"/> 作用于struts2的域对象,而不 ...

  7. 【Struts2五】ValueStack以及ognl表达式二(经常使用标签)

    Ognl经常使用标签:   1.s:debug       假设把该标签放入到s:iterator中能够看到当前正在迭代的元素的状态    2.s:property       1.输出       ...

  8. Struts2 OGNL案例

    一>>原始类型与包装类型 先定义两个实体类User和Address User package cn.entity; public class User { private String n ...

  9. Struts2 OGNL 自动转换Date类型的一些注意事项

    Strut2 有比较完善的使用OGNL的jsp标签自动转化为对应的后台对象的功能. 这里java.util.Date的自动转化有一些需要注意的地方(局部转换): 1.必须要在struts的xml文件中 ...

随机推荐

  1. How to mount HFS EFI on macOS

    mount_hfs /dev/disk0s1 /volumes/efi

  2. DotNetty 实现 Modbus TCP 系列 (一) 报文类

    本文已收录至:开源 DotNetty 实现的 Modbus TCP/IP 协议 Modbus TCP/IP 报文 报文最大长度为 260 byte (ADU = 7 byte MBAP Header ...

  3. Logging - MVC Using Log4net Save to File and Database

    第一步:创建Config文件夹和log4net.config 第二步:在log4net.confg黏贴以下配置 <?xml version="1.0" encoding=&q ...

  4. c++ string类型的定义及方法

    1.c++ 有两种风格的字符串形式  c风格字符串  定义及初始化  char a[]={'h','e','l','l','o','\0'}  或者  char a[]="hello&quo ...

  5. python 文件下载

    为了演示urllib3的使用,我们这里将会从一个网站下载两个文件.首先,需要导入urllib3库: import urllib3 这两个文件的源url为: url1 = 'http://earthqu ...

  6. HDU5769-Substring-多校#4-1006-后缀数组

    给定一个字符x和一个字符串.要求输出包含此字符的所有不同字串. 后缀数组可以计算一个字符串的所有不同字串,理解了原理就能做这题了. 对于每一个后缀i,将产生len-sa[i]-hight[i]的前缀, ...

  7. 洛谷3703 [SDOI2017] 树点染色 【LCT】【线段树】

    题目分析: 操作一很明显等价于LCT上的access操作,操作二是常识,操作三转化到dfs序上求最大值也是常识.access的时候顺便在线段树中把对应部分-1,把右子树的子树+1即可. 代码: #in ...

  8. win10系统同时安装python2.7和python3.6

    我是先在本机上安装的python3.6.5,因为要学习一个框架,但是这个框架只支持python2,所以我又安装了python2.7.15,并且配置到系统环境变量 环境变量配置了python3.6.5的 ...

  9. JPQL的关联查询

    一般情况下,直接使用mysql语句写关联语句,是join on 的形式,如下: select * from tablea as a left join tableb as b on b.tablea_ ...

  10. WC2019 题目集

    最近写的一些 WC2019 上讲的一些题.还是怕忘了,写点东西记录一下. LOJ2983 「WC2019」数树 题意 本题包含三个问题: 问题 0:已知两棵 \(n\) 个节点的树的形态(两棵树的节点 ...