Struts(十三):通用标签
- Struts标签简介:
Struts2标签库提供了主题、模板支持,极大地简化了视图页面的编写,而且,struts2的主题、模板都提供了很好的扩展性,实现了更好的代码复用。
Struts2允许在页面中使用自定义组件,这完全能满足项目中页面显示复杂,多变的需求。
Struts2的标签库有一个巨大的改进之处,struts2标签库的标签不依赖于任何表现层技术,也就是说strtus2提供了大部分标签,可以在各种表现技术中使用。
包括最常用的jsp页面,也可以说Velocity和FreeMarker等模板技术中的使用。
- Struts标签分类:
1.用户界面标签(UI标签):主要用来生成HTML元素的标签。
(1)表单标签:主要用于生成HTML页面的FORM元素,以及普通表单元素的标签。
(2)非表单标签:主要用于生成页面上的tree,Tab页等。
2.非用户界面标签(非UI标签):主要用于数据访问,逻辑控制。
(1)数据访问标签:主要包含用于输出值栈(ValueStack)中的值,完成国际化等功能的标签。
(2)流程控制标签:主要包含用于实现分支,循环等流程控制的标签。
3.AJAX标签:用于支持Ajax效果
- 使用前准备:
使用时需要在jsp页面中引入标签:
<%@ taglib prefix="s" uri="/struts-tags"%>
需要在web.xml中添加使用struts的配置信息。
- 标签的使用:
1、<s:property/>标签:用来输出一个值栈属性值
名字 | 类型 | 默认值 | 说明 |
default | String | 可选,若value值为null或者没有给定,将显示该属性值 | |
escape | boolean | true | 可选,是否要对html特殊字符进行转义 |
value | String | <来自栈顶对象> | 将要显示的值 |
index.jsp:
<a href="strutstags.action?name=hello name">send parameter link</a>
comon-tags.jsp
s:property:打印对象栈中的属性值<br>
<s:property value="tagName"></s:property><br>
map栈:对于map栈,打印request,session,application的某个属性值或者某个请求参数的值。<br>
<s:property value="#session.date"></s:property><br>
<s:property value="#parameters.name[0]"></s:property><br>
struts.xml
<action name="strutstags" class="com.dx.struts2.StrutsTags" method="test">
<result name="test">/comon-tags.jsp</result>
</action>
SturtsTags.java action类:
/**
* @author Administrator
*
*/
package com.dx.struts2; import java.util.Date;
import java.util.Map; import org.apache.struts2.interceptor.SessionAware; public class StrutsTags implements SessionAware{
private String tagName; public String getTagName() {
return tagName;
} public void setTagName(String tagName) {
this.tagName = tagName;
} public String test(){
this.tagName="Hello Struts-tags";
this.session.put("date", new Date()); return "test";
} private Map<String,Object> session;
@Override
public void setSession(Map<String, Object> session) {
// TODO Auto-generated method stub
this.session=session;
}
}
输出结果:
s:property:打印对象栈中的属性值
Hello Struts-tags
map栈:对于map栈,打印request,session,application的某个属性值或者某个请求参数的值。
17-3-20
hello name
2、url标签用来动态地创建一个URL
名字 | 类型 | 默认值 | 说明 |
action | String | 可选,指定生成的url为哪个action | |
anchor | String | 可选,指定被创建的url的链接锚点 | |
encode | Boolean | true | 可选,是否对参数进行编码 |
escapeAmp | Boolean | true | 可选,是否要对“&”字符进行转义 |
includeContext | Boolean | true | 可选,是否要把当前的上下文包括进来 |
includeParams | String | get | 可选,指定是否包含请求参数,可以取3个值之一:one/get/all |
method | String | 可选,指定action的方法,当用action属性来生成url是,如果指定该属性,url将链接到指定的action的方法上。 | |
namespace | String | 可选,指定url的命名空间 | |
portletMode | String | 可选,指定结果页面的portlet模式 | |
protletUrlType | String | 可选,指定将被创建的URL是一个protlet例程,还是action URL | |
schema | String | 可选,指定使用什么协议:http,https | |
value | String | 可选,指定将生成的url值(如果新建URL的不是一个action的话) | |
var | String | 可选,指定用来被压入ContextMap中的键值 | |
windowState | String | 可选,当用在一个portlet环境时,用来指定portlet的窗口状态 |
comon-tags.jsp
s:url 创建一个url地址<br>
<s:url value="/helloValue" var="url1">
<!-- 对于Value值会自动动态赋值 -->
<s:param name="tagInteger" value="111"/>
</s:url>
${url1}<br>
<s:url value="/helloValue" var="url2">
<!-- 对于Value值会自动的进行OGNL解析 -->
<s:param name="tagInteger" value="tagInteger"/>
</s:url>
${url2}<br>
<s:url value="/helloValue" var="url3">
<!-- 对于Value值会自动的进行OGNL解析,若不希望进行解析,则需要使用单引号引着 -->
<s:param name="tagInteger" value="'abc'"/>
</s:url>
${url3}<br>
<s:url action="helloAction" namespace="/hellonamespace" method="save" var="url4">
<s:param name="tagInteger" value="'abcde'"/>
</s:url>
${url4}<br>
<s:url value="/testUrl" var="url5" includeParams="get">
</s:url>
${url5}<br>
<!-- post方式提交的参数 -->
<s:url value="/testUrl" var="url6" includeParams="all">
</s:url>
${url6}<br>
备注:上边的s:param 中也支持ognl写法比如:
<s:url value="/testUrl" var="url7">
<s:param name="date" value="#session.date"></s:param>
</s:url>
<br>
index.jsp
<s:form action="strutstags.action" method="post">
product name:
<input name="productName" />
<br />
product description:
<input name="productDesc" />
<br />
product price:
<input name="productPrice" />
<br />
<s:submit value="提交"></s:submit>
</s:form>
<br>
<a href="strutstags.action?name=hello name">send parameter link</a>
ComonTags.java
/**
* @author Administrator
*
*/
package com.dx.struts2; import java.util.Date;
import java.util.Map; import org.apache.struts2.interceptor.SessionAware; public class StrutsTags implements SessionAware{
private Integer tagInteger;
private String tagName; public String getTagName() {
return tagName;
} public void setTagName(String tagName) {
this.tagName = tagName;
} public Integer getTagInteger() {
return tagInteger;
} public void setTagInteger(Integer tagInteger) {
this.tagInteger = tagInteger;
} public String test(){
this.tagName="Hello Struts-tags";
this.tagInteger=8888;
this.session.put("date", new Date()); return "test";
} private Map<String,Object> session;
@Override
public void setSession(Map<String, Object> session) {
// TODO Auto-generated method stub
this.session=session;
}
}
当通过点击index.jsp中的"send parameter link"时,comon-tags.jsp显示效果:
s:url 创建一个url地址
/Struts_01/helloValue?tagInteger=111
/Struts_01/helloValue?tagInteger=8888
/Struts_01/helloValue?tagInteger=abc
/Struts_01/hellonamespace/helloAction!save.action?tagInteger=abcde
/Struts_01/testUrl?name=hello+name
/Struts_01/testUrl?name=hello+name
当通过点击index.jsp的"提交"按钮时,comon-tags.jsp显示效果:
s:url 创建一个url地址
/Struts_01/helloValue?tagInteger=111
/Struts_01/helloValue?tagInteger=8888
/Struts_01/helloValue?tagInteger=abc
/Struts_01/hellonamespace/helloAction!save.action?tagInteger=abcde
/Struts_01/testUrl
/Struts_01/testUrl?productName=1&productDesc=2&productPrice=3
3、set 标签 用来在以下Map对象里创建一个键值对:
------ValueStack值栈的ContextMap值栈
------Map类型的session对象
------Map类型application对象
------Map类型的request对象
------Map类型的page对象
名字 | 类型 | 默认值 | 说明 |
name | String | 将被创建的属性的键 | |
value | String | 该键新引用的对象 | |
scope | String | default | 目标变量的作用范围,可取值是application/session/request/page和default |
页面
<!-- 会对value值自动的进行OGNL解析 -->
<s:set name="mySet1" value="tagInteger" scope="request"></s:set><br>
${mySet1}<br>
${requestScope.mySet1 }<br>
输出结果:
8888
8888
4、push标签
push标签的功能和set标签类似;
push标签将把一个对象压入ValueStack,而不是压入ContextMap;
push标签在标签起始是把一个对象压入栈,标签结束时将对象弹出栈。
名字 | 类型 | 默认值 | 说明 |
Value | String | 将压入ValueStack栈的值 |
页面:
s:push<br>
<s:push value="#request.people">
name:${name}-age:${age }
</s:push><br>
name:${name}-age:${age }<br>
ComonTags.java action
/**
* @author Administrator
*
*/
package com.dx.struts2; import java.util.Date;
import java.util.Map; import org.apache.struts2.interceptor.RequestAware;
import org.apache.struts2.interceptor.SessionAware; public class StrutsTags implements SessionAware , RequestAware{
private Integer tagInteger;
private String tagName; public String getTagName() {
return tagName;
} public void setTagName(String tagName) {
this.tagName = tagName;
} public Integer getTagInteger() {
return tagInteger;
} public void setTagInteger(Integer tagInteger) {
this.tagInteger = tagInteger;
} public String test(){
this.tagName="Hello Struts-tags";
this.tagInteger=8888;
this.session.put("date", new Date()); People people=new People();
people.setName("people1");
people.setAge(10); this.request.put("people", people); return "test";
} private Map<String,Object> session;
@Override
public void setSession(Map<String, Object> session) {
this.session=session;
} private Map<String,Object> request;
@Override
public void setRequest(Map<String, Object> request) {
this.request= request;
}
}
Peopel.java
package com.dx.struts2; public class People {
private String name;
private Integer age; public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
输出结果:
s:push
name:people1-age:10
name:-age:
5、if,else 和elseif标签
test属性必须
s:if s:elseif s:else<br>
${requestScope.people.age }<br>
<s:if test="#request.people.age>80">>80</s:if>
<s:elseif test="#request.people.age>30">>30</s:elseif>
<s:elseif test="#request.people.age>8">>8</s:elseif>
<s:else><=8</s:else>
<br>
<s:if test="#request.people.age>10">>10</s:if>
<s:else><=10</s:else>
<br>
测试结果:
s:if s:elseif s:else
10
>8
<=10
6、iterator标签
iterator标签用来遍历一个数组,Collection或一个Map,并把这个可遍历对象里的一个元素依次压入和弹出ValueStack栈
名字 | 类型 | 默认值 | 说明 |
value | String | 将被遍历是可以遍历对象 | |
status | org.apache.struts2.views.jsp.IteratorStatus | ||
var | String | 用来引用这个可遍历对象中的当前元素的变量 |
在开始执行时,iterator标签会先把IteratorStatus类的一个实例压入ContextMap,并把每次循环遍历时更新它,可以将一个指向IteratorStatus对象的变量赋值给status.
StrutsTags.java的test方法添加代码:
List<People> peoples=new ArrayList<People>(); peoples.add(new People("AAA",111));
peoples.add(new People("BBB",222));
peoples.add(new People("CCC",333));
peoples.add(new People("DDD",444));
peoples.add(new People("EEE",555)); this.request.put("peoples", peoples);
修改People.java添加构造函数:
package com.dx.struts2; public class People {
private String name;
private Integer age; public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
} public People(){} public People(String name,Integer age){
this.name=name;
this.age=age;
}
}
comon-tags.jsp
s:iterator<br>
<s:iterator value="#request.peoples" status="status">
index:${status.index }-count:${status.count }:${name }-${age }<br>
</s:iterator><br>
输出结果:
s:iterator
index:0-count:1:AAA-111
index:1-count:2:BBB-222
index:2-count:3:CCC-333
index:3-count:4:DDD-444
index:4-count:5:EEE-555
6、sort标签:用来对一个可遍历的对象里的元素进行排序
名称 | 类型 | 默认值 | 说明 |
comparator | java.util.Comparator | 在排序过程中使用的比较器 | |
source | String | 将对之进行排序的可遍历对象 | |
var | String | 用来应用因排序而新生成的可遍历对象的变量 |
添加PeopleComparator.java
package com.dx.struts2; import java.util.Comparator; public class PeopleComparator implements Comparator<People>{ @Override
public int compare(People o1, People o2) {
return o1.getName().compareTo(o2.getName());
} }
修改ComonTags.java:
/**
* @author Administrator
*
*/
package com.dx.struts2; import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map; import org.apache.struts2.interceptor.RequestAware;
import org.apache.struts2.interceptor.SessionAware; public class StrutsTags implements SessionAware, RequestAware {
private Integer tagInteger;
private String tagName;
private PeopleComparator peopleComparator; public String getTagName() {
return tagName;
} public void setTagName(String tagName) {
this.tagName = tagName;
} public Integer getTagInteger() {
return tagInteger;
} public void setTagInteger(Integer tagInteger) {
this.tagInteger = tagInteger;
} public PeopleComparator getPeopleComparator() {
return peopleComparator;
} public void setPeopleComparator(PeopleComparator peopleComparator) {
this.peopleComparator = peopleComparator;
} public String test() {
this.tagName = "Hello Struts-tags";
this.tagInteger = 8888;
this.peopleComparator=new PeopleComparator(); this.session.put("date", new Date()); People people = new People();
people.setName("people1");
people.setAge(10); this.request.put("people", people); List<People> peoples = new ArrayList<People>(); peoples.add(new People("AAA", 111));
peoples.add(new People("DDD", 444));
peoples.add(new People("CCC", 333));
peoples.add(new People("EEE", 555));
peoples.add(new People("BBB", 222)); this.request.put("peoples", peoples); return "test";
} private Map<String, Object> session; @Override
public void setSession(Map<String, Object> session) {
this.session = session;
} private Map<String, Object> request; @Override
public void setRequest(Map<String, Object> request) {
this.request = request;
}
}
修改comon-tags.jsp:
s:sort<br>
<s:sort comparator="peopleComparator" source="#request.peoples" var="peoples2">
</s:sort>
<s:iterator value="#attr.peoples2">
${name }-${age }<br>
</s:iterator>
测试结果:
s:sort
AAA-111
BBB-222
CCC-333
DDD-444
EEE-555
7、date标签
名字 | 类型 | 默认值 | 说明 |
format | String | 可选,日期的格式 | |
name | String | 将被排版的日期值 | |
nice | Boolean | false | 可选,指定是否输出日期和当前日期之间的时间差 |
var | String | 可选,用来引用被压入ValueStack栈的日期值的变量 |
format属性值必须是java.util.SimpleDateFormat类里定义的日期、时间格式之一。
修改页面:
s:date<br>
<s:date name="#session.date" format="yyyy-MM-dd HH:mm:ss" var="date23"></s:date>
${date23 }
输出结果:
s:date
2017-03-20 21:53:19
8、a标签
a标签将呈现为一个html链接,这个标签可以接受HTML语言中的a元素所能接受的所有属性。
修改页面代码:
a:标签<br>
<s:iterator value="#request.peoples">
<s:a href="/myTest.action?name=%{name}">${age }</s:a><br>
</s:iterator>
生成结果:
Struts(十三):通用标签的更多相关文章
- Java - 框架之 Struts2
一. Package 标签 1. 标签属性:name : 包的名称,只有在一个项目中不重名即可.extends : 继承哪个包,默认为 struts-default.name ...
- 20160501--struts2入门2
一.Action名称的搜索顺序 1.获得请求路径的URI,例如url是:http://server/struts2/path1/path2/path3/test.action 2.首先寻找name ...
- Struts(二十三):使用声名式验证
Struts2工程中的验证分为两种: 1.基于XWork Validation Framework的声明式验证:Struts2提供了一些基于XWork Validation Framework的内建验 ...
- Struts(十四):通用标签-form表单
form标签是struts2标签中一个重要标签: 可以生成html标签,使用起来和html的form标签差不多: Strut2的form标签会生成一个table,进行自动布局: 可以对表单提交的值进行 ...
- struts 初体验
1. 什么是Struts2 struts2是以WebWork的设计思想为核心,吸收了Struts1的部分有点,建立了兼容WebWork和Struts1的MVC框架. 1.1 WebWork: 强调系统 ...
- [原创]java WEB学习笔记61:Struts2学习之路--通用标签 property,uri,param,set,push,if-else,itertor,sort,date,a标签等
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- J2EE的十三种技术(规范)
J2EE的十三种技术(规范) Java数据库连接(JDBC) JDBC API以一个统一的方式访问各种数据库.与ODBC类似,JDBC将开发者和私有数据库之间的问题隔离开来.由于它建立在Java上, ...
- j2ee的十三种技术
J2EE的十三种技术(规范) 种不同的驱动,具体来说,包括有: 类型1:JDBC-ODBC桥 在JDBC刚产生时,JDBC-ODBC桥是非常有用的.通过它,开发者可以使用JDBC来访问一个ODBC数 ...
- 第二章 Struts 2的应用
2.1 Struts 2的应用 2.1.1 使用步骤 1.创建web项目,添加jar包,创建helloWorld.jsp页面 2.创建HelloWorldAction ...
随机推荐
- Mycat 分片规则详解--一致性hash分片
实现方式:基于hash算法的分片中,算法内部是把记录分片到一种叫做"bucket"(hash桶)的内部算法结构中的,然后hash桶与实际的分片节点一一对应,从此实现了分片.路由的功 ...
- Mycat 分片规则详解--数据迁移及节点扩容
使用的是 Mycat 提供的 dataMigrate 脚本进行对数据进行迁移和节点扩容,目前支持的 Mycat 是1.6 版本,由于 Mycat 是由 Java 编写的因此在做数据迁移及节点扩容时需要 ...
- Day3--------------目录文件的浏览、管理及维护
1.pwd命令功能 2.cd命令功能 cd.. 返回上一级 cd~ cd- 返回上一次的目录 cd 3.ls命令功能 ls -a ls -all ls -l 4.cp命令功能 cp -i 覆 ...
- Redis 集群环境添加节点失败问题
最近在给公司网管系统Redis集群环境添加节点时候遇到一个问题,提示新增的Node不为空: [root@node00 src]# ./redis-trib.rb add-node --slave -- ...
- 设计模式 --> (2)单例模式
单例模式 单例模式也称为单件模式.单子模式,可能是使用最广泛的设计模式.其意图是保证一个类仅有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享.如系统的日志输出,GUI应用必须是单鼠标 ...
- java排序算法(八):希尔排序(shell排序)
java排序算法(八):希尔排序(shell排序) 希尔排序(缩小增量法)属于插入类排序,由shell提出,希尔排序对直接插入排序进行了简单的改进,它通过加大插入排序中元素之间的间隔,并在这些有间隔的 ...
- Hibernate学习笔记一 使用idea开发工具搭建框架
1.导包,包下载地址:http://hibernate.org/orm/downloads/ 2.创建数据库,准备表,实体.示例: CREATE TABLE `cst_customer` ( `cus ...
- C语言第三次作业---单层循环结构
一.PTA实验作业 题目一.最佳情侣身高差 1.实验代码 int N;//存放输入的人数 char sex; double hight1,hight2;//分别存放输入的身高和输出的身高 scanf( ...
- C语言博客作业一二维数组
一.PTA实验作业 题目1.7-5 数组循环左移 1.本题PTA提交列表 2.设计思路 定义变量a[100]存放整数,整数n,整数m,change作为交换数组的媒介,j,i作为循环的变量 输入整数n, ...
- collections deque队列及其他队列
from collections import deque dq = deque(range(10),maxlen=10) dq.rotate(3)#队列旋转操作接受一个参数N,让N>0时,队列 ...