欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

Struts2标签

时间:2023-06-17
文章目录

Struts2 标签是干什么的Struts2 标签可以使用在哪里常用的标签

s:propertys:iterators:selects:if
Struts2 标签的官方在线说明文档:https://struts.apache.org/tag-developers/tag-reference.html Struts2 标签是干什么的

Struts2 自己定义的标记库,专门用于访问 ValueStack,查看 ValueStack 中的内容。

使用 Struts 标签之前,在 JSP 中需要添加相关的指令来导入标签库:

<%@ taglib uri="/struts-tags" prefix="s" %>

Struts2 标签可以使用在哪里

Struts2 标签都是结合 OGNL 表达式一起使用的。

Struts2 标签只能用于 JSP 文件中,不可以在 XML 和 HTML 文件中使用。

Struts2 标签中不能使用 EL 表达式。

常用的标签 s:property

value 属性值是 ognl 表达式,该标签的底层是执行如下的代码:

String name = Ognl.getValue("name", context, root).toString();out.print(name);

标签表示访问 ValueStack 获取 name 属性值,并输出到页面中。

ognl 表达式中以 # 开头,表示访问 ValueStack 中的 context 对象,获取 name 属性值,并输出到页面中。

如果省略 value 属性,则默认将 root 栈顶的第一个对象取出,直接输出到页面中。

JSP 的代码如下:

<%@ page import="java.util.*" %><%@ page contentType="text/html;charset=UTF-8" language="java" %><%@ taglib uri="/struts-tags" prefix="s" %> Title

访问 JSP 文件得到如下的结果:

value 属性值中还可以进行字符串拼接:

先从 ValueStack 对象中获取 name 的属性值,然后和字符串“java”拼接,最后输出到页面中。

value 属性值中可以调用方法:

先从 ValueStack 对象中获取 arry 的属性值,其实是一个字符串数组,接着获取下标索引为 1 的元素,接着调用该元素对象的 toUpperCase() 方法,最后将结果值输出到页面中。

s:iterator

“projects” 是 ognl 表达式,底层是执行下面的代码来获取到对应的属性值:

List projectList = (List)Ognl.getValue("projects",root);// root是CompoundRoot对象,其实就是一个集合对象,数据的存取遵循“栈”规则

OGNL 引擎从 root 的栈顶开始查找含有 projects 属性的对象,找到后就不会继续往下查找,然后调对象的 getProjects() 方法获取到对应的属性值,其实就是一个集合对象。

接着开始遍历集合 projects,循环取出集合中的元素。将取出的元素(Project 对象)压入 root 栈顶,同时以 pro 为 key 值存放在 context 对象中(这是 ValueStack 的另一个属性,是 Map 结构),那么要访问 context 中的这个元素,ognl 表达式的格式为 #pro。不仅如此,还会以 pro 为属性名将取出的元素绑定到 PageContex 对象中。

当取出集合中的第二个元素时会将之前压入 root 栈顶的对象先弹出再压入 root 的栈顶,同时又以 pro 为 key 值将第二个元素存入 context 中,那么之前的就会被覆盖掉。

这些数据状态可以通过 标签来记录获知!!

我们一起来分析下面的标签语句:

${pro.name}${name}

属性 status 用来指定一个状态对象,该对象有以下的属性:

index:被遍历元素的下标
count:统计遍历的次数
first:
even(奇数):
odd(偶数):

其中的 status 属性就是用来指定状态对象的,其值就是 ognl 表达式,可以找到存储在 context 对象中的状态对象,所以访问状态对象的相关属性,需要加上 #,例如:#stus.count。

其中的 value 属性用来指定被遍历的集合对象,其值就是 ognl 表达式,通过该表达式可以获取到被遍历的集合对象,实际是到 ValueStack 对象中的 root 对象中查找。

其中的 var="pro",表示迭代遍历的时候会以 pro 为绑定名将遍历出来的对象绑定到 PageContext 对象和 ValueStack 的 context 对象中。

其中的 标签的 value 属性值是 #stus.count,表示到 ValueStack 对象中的 context 对象查找属性 stus,找到后再获取 count 属性值,标签 就是将最终获取到值输出到页面中。

其中的 标签的 value 属性值是 name,表示到 ValueStack 对象中的 root 对象查找属性 name,找到后获取 name 的值并输出到页面中。遍历处理的 Project 对象都会压入 root 栈顶,所以可以到 root 对象中获取 Project 对象的 name 属性值。

其中的 标签的 value 属性值是 #pro.name,表示到 ValueStack 对象中的 context 对象查找属性 pro,找到后再获取 name 属性值,标签 就是将最终获取到值输出到页面中。

其中的 ${pro.name} el 表达式是去 PageContext 对象中找到绑定名为 pro 的对象,找到后获取该对象的 name 属性值,并输出到页面中。

其中的 ${name} el 表达式是取 ValueStack 的 root 对象中查找 name 属性,找到后将属性值输出到页面中。这个特性是因为 Struts2 对 el 表达式进行了改进才得以实现的。

标签对应于 jstl 的 标签。

标签的应用示例代码如下:

${id}${name}${startDate}${endDate}

Action 对象有属性 projects,这个属性值是一个集合对象,从集合遍历出来的 project 对象会压入 ValueStack 的 root 对象中,所以可以通过 el 表达式直接获取 project 对象的属性值。

上述的 el 表达式也可以替换成 标签,如下所示:

标签就是去访问 ValueStack 对象,获取指定属性的值,并输出到页面中。

标签的应用示例代码如下:

${project.id}${project.name}${project.startDate}${project.endDate}

s:select

这个struts2标签很有意思,最后生成1个下拉选择框,是根据list这个集合迭代生成各个Option对象,这个Option对象的value属性值等于集合取出来的对象的id属性值,Option对象的text属性值等于集合取出来的对象的name属性值,并且这个下拉选择框的头1个Option对象的value属性值等于headerKey的值,text属性值等于headerValue的值。

s:if

这个标签对应于 jstl 的 标签。

Struts2 的 标签的使用示例:

上一页上一页

属性 test 的值是 ognl 表达式,表达式 page > 1 会先获取 page 的值,然后和 1 进行比较,成立则返回 true,test="true" 则会将 标签体的内容输出到页面中。如果 test="false" 则会将 标签体中的内容输出到页面中。

对应的 jstl 的 标签的示例代码如下:

上一页上一页

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。