struts2标签库----数据标签详解
上篇文章我们介绍struts2标签库中的控制标签的基本使用和部分原理,本篇文章接着了解下标签库中有关数据标签的使用和原理。主要涉及以下数据标签:
- action标签:用于在视图页面跳转到一个Action
- bean标签:用于创建一个Javabean实例,按需保存到context中
- date标签:用于格式化输出一个日期
- debug标签:用于调试查看ognl上下文中内容
- include标签:用于包含其他的jsp或者servlet页面资源
- param标签:主要配合别的标签作为子标签使用
- push标签:用于将某个值放入到root栈顶
- set标签:设置一个新变量,放入指定范围
- url标签:用于生成一个URL地址
数据标签主要是用于提供各种数据访问相关的功能,生成输出国际化信息等。上述所列举的主要是一些常用的,给我们提供较大方便的标签,具体的每个标签的使用和简单的原理会在下文介绍。
一、action标签
该标签用于向指定的action发出请求,拉取该action对应的视图页面资源。它主要有以下几个属性:
- var:该属性指定放入当前action到context中的名称,如果没有指定该属性则不会保存该action到context中
- name:该属性指定了需要调用的action的名称
- namespace:该属性指定该action的命名空间
- executeResult:该属性指定了该action最后的视图页面是否要被包含到本页面
- ignoreContextParams:它指定了本页面的请求参数是否要转发到该action页面
下面通过几个示例了解下具体的使用情况:
//定义一个将要被转向的action
public class MyAction implements Action {
public String execute() throws Exception{
return ERROR;
}
}
<body>
<h1>this is the index page</h1>
<s:action name="my" executeResult="true"/>
<br/>
<s:debug/>
</body>
上面的action标签向名称为my的action转发请求并指定需要将该action加载的视图资源返回,运行截图如下:
下面我们修改MyAction:
public class MyAction implements Action {
private String username;
public void setUsername(String name){
this.username = name;
}
public String getUsername(){
return this.username;
}
public String execute() throws Exception{
ActionContext.getContext().put("hello",username);
return ERROR;
}
}
<body>
<h1>this is the index page</h1>
<s:action name="my" executeResult="true" ignoreContextParams="false"/>
<br/>
<s:debug/>
</body>
如上述代码所示,我们在myAction中定义了一个username属性,然后直接将它put到context中,最后在error页面获取该值并打印。结果如下:
首先我们是在login.jsp页面(该页面未给出,只有简单的一个文本框)提交了一个请求参数到我们的index页面,在index页面中,我们使用action标签转发请求,其中指定该action标签中ignoreContextParams为false表示在被请求的action中会传入当前index页面的请求参数。最后我们在MyAction中自动获取到了该参数然后交给error页面输出。该例主要演示ignoreContextParams属性可以控制是否转发请求参数的作用。
二、bean标签
bean标签主要用来创建一个Javabean的实例,其中又可以使用param标签为该Javabean实例传递属性值。该标签主要有以下两个属性:
- name:该属性指定了将要被创建实例的Javabean的类名
- var:指定了该属性将会把该实例保存到context中和pageScope中
我们看一个例子:
//定义一个Javabean
public class Walker {
private String username;
private int age;
public void setUsername(String name){
this.username =name;
}
public String getUsername(){
return this.username;
}
public void setAge(int age){
this.age = age;
}
public int getAge(){
return this.age;
}
}
<body>
<h1>this is the index page</h1>
<s:bean name="MyPackage.Walker" var="walker">
<s:param name="username" value="'walker'"/>
<s:param name="age" value="22"/>
</s:bean>
<s:property value="#walker.username"/>
<br/>
<s:property value="#walker.age"/>
<s:debug/>
</body>
输出结果如下:
上述代码实例化了一个Javabean实例,并将它保存到context中,接着我们输出该内容,需要注意的是param元素中value属性依然是ognl表达式,想要赋值字符串需要单引号。
三、date标签
date标签用于格式化输出一个日期,或者输出当前时刻与指定时间之间的时间差。该标签主要有以下几个属性:
- format:该属性的值为一个格式字符串,它用于为指定日期提供输出格式
- nice:该属性用于指定是否需要输出当前时刻与指定时刻之间的时间差
- name:该属性接受的是一个具体的时间
- var:指定了该属性会将该日期保存到context和pageScope中
需要注意的是,该标签要么输出的是指定了格式的日期,要么输出的是具体的时间差。也就是如果指定nice属性为true,则不应该指定format属性,因为nice属性已经指定了该标签将输出一个时间差格式,如果强行指定format属性,该属性的值将会无效。下面我们看几个例子:
<body>
<h1>this is the index page</h1>
<s:bean name="java.util.Date" var="date"/><br/>
<s:date name="#date"/><br/>
<s:date name="#date" format="dd/MM/yyyy"/><br/>
<%
Date date = new Date(123123);
request.setAttribute("date",date);
%>
<s:date name="#request.date" nice="true"/>
<br/>
<s:debug/>
</body>
运行结果如下:
第一种情况,如果既没有指定format属性,也没有指定nice值,那么会使用默认的format格式输出。第二种情况按照指定的格式输出。第三种情况输出为指定时间距离当前时间的时间差。
四、debug标签
该标签主要用于调试,查看ValueStack中的各个参数的实际值的情况。
五、include标签
include标签主要用于将一个jsp页面或者servlet页面包含到本页面来。该标签只有一个属性value,该属性指定了需要包含的资源位置。我们看几个例子:
<body>
<h1>this is the index page</h1>
<s:include value="error.jsp"/>
<br/>
<s:debug/>
</body>
结果如下:
我们查看源码:
该标签很是类似于jsp的编译指令include。当然我们也可以通过param标签传入参数到被包含的页面中。例如:
<s:include value="error.jsp">
<s:param name="a" value="'walker'"/>
<s:param name="b" value="'yam'"/>
<s:param name="c" value="'cyy'"/>
</s:include>
六、push标签
push用于将某个值放到root栈顶,其中有个属性value表示即将被放入栈顶的元素。下面看个例子:
<body>
<h1>this is the index page</h1>
<s:bean name="MyPackage.Walker" var="w">
<s:param name="username" value="'walker'"/>
<s:param name="age" value="23"/>
</s:bean>
<s:push value="#w">
<s:property value="username"/><br/>
<s:property value="age"/>
</s:push>
<p>离开push标签之后</p>
<s:property value="username"/>
<br/>
<s:debug/>
</body>
首先我们实例化一个walker类实例并保存到context中,接着我们在push标签中直接访问栈顶元素获取该实例的属性值。但是我们离开push标签之后就不能获取该实例的属性值了,因为push标签结束之后会将刚刚放入root栈中的元素移除。也就是说我们如果想要把一个元素送入root栈来方便访问,那么就必须在push标签内部完成访问操作。下面是上述代码的结果截图:
七、set标签
set标签用于将某个值放入到指定的范围内,可以理解为定义一个新变量并将它放入到指定范围内。该标签主要有以下几个属性:
- scope:指定该变量将会被存放到的范围,可以是application,session,request,page,action这5个值。
- name:该属性指定了该元素保存的指定范围内的key值
- value:该属性指定了将要被存放的实例的值
- var:该属性指定了将要存放到context中的元素名称
下面通过几个实例了解下基本的使用情况:
<body>
<h1>this is the index page</h1>
<s:bean name="MyPackage.Walker" var="w">
<s:param name="username" value="'walker'"/>
<s:param name="age" value="23"/>
</s:bean>
<s:set value="#w" name="a" scope="request"/>
<s:property value="#request.a.username"/>
<br/>
<s:debug/>
</body>
首先我们实例化了一个walker对象,然后我们将该实例保存到request范围内,最后通过property标签取出该数据内容。运行截图如下:
上述代码演示的是通过set标签将元素保存到request范围内,至于其他范围内的数据保存情况类似,此处不再赘述。需要注意一点的是:如果指定将元素保存到action范围的话,那么该元素不仅会被保存到request中,还会保存到context中。
八、url标签
url标签用于生成一个URL地址,该标签主要有以下几个属性值:
- action:指定生成的URL地址为某个action
- anchor:指定了URL的锚点
- encode:指定了是否需要对参数进行编码
- includeContext:指定是否需要将当前上下文包含到该URL中
- includeParams:该属性用于指定是否包含请求参数在URL中,该属性的值有以下几个,none,all,get。
- method:该属性指定了调用目的action的某个方法
- namespace:指定了action的命名空间
- portletMode:指定结果页面的portlet模式
- scheme:用于设置scheme属性
- value:用于指定生成的URL的值,和action是差不多的,只是action指定的是action的URL
- var:指定该属性会将该URL保存到context中
- windowState:指定结果页面的portlet窗口状态
上面简单介绍各个属性的作用,单总结的很是粗暴。下面通过具体的实例来深刻理解下它们各自的作用。
<body>
<h1>this is the index page</h1>
<s:url value="my" var="u" escapeAmp="false">
<s:param name="id" value="01"/>
<s:param name="age" value="22"/>
</s:url>
<s:property value="#u"/>
<br/>
<s:debug/>
</body>
生成URL:my?id=1&age=22
如上所示,我们指定escapeAmp为false表示用于连接多个参数的&符号不会被编码,我们通过param子标签传入参数作为URL的参数,最后生成完整URL。至于一些其他的属性值,只有在具体项目使用中才能有更加深刻的体会,此处没有比较好的例子,就不赘述了。
有关于struts2标签库的数据标签已经简单介绍完了,由于没有结合具体的项目,所以介绍的很浅显,不当之处,望指出!
struts2标签库----数据标签详解的更多相关文章
- Struts2拦截器的使用 (详解)
Struts2拦截器的使用 (详解) 如何使用struts2拦截器,或者自定义拦截器.特别注意,在使用拦截器的时候,在Action里面必须最后一定要引用struts2自带的拦截器缺省堆栈default ...
- ContentProvider数据访问详解
ContentProvider数据访问详解 Android官方指出的数据存储方式总共有五种:Shared Preferences.网络存储.文件存储.外储存储.SQLite,这些存储方式一般都只是在一 ...
- JSTL标签库--核心标签库
->JSTL的使用和EL表达式是分不开的 ->JSTL标签库分为5类 1.核心标签库(这里只介绍该标签库) 2.I18N格式化标签库 3.SQL标签库 4.XML标签库 5.函数标签库 - ...
- 全网最全的Windows下Python2 / Python3里正确下载安装用来向微信好友发送消息的itchat库(图文详解)
不多说,直接上干货! 建议,你用Anaconda2或Anaconda3. 见 全网最全的Windows下Anaconda2 / Anaconda3里正确下载安装用来向微信好友发送消息的itchat库( ...
- python中requests库使用方法详解
目录 python中requests库使用方法详解 官方文档 什么是Requests 安装Requests库 基本的GET请求 带参数的GET请求 解析json 添加headers 基本POST请求 ...
- 3dTiles 数据规范详解[1] 介绍
版权:转载请带原地址.https://www.cnblogs.com/onsummer/p/12799366.html @秋意正寒 Web中的三维 html5和webgl技术使得浏览器三维变成了可能. ...
- JSTL函数标签库 fn标签
JSTL函数标签库 fn标签 在使用jstl的函数标签库之前需要在页面中引入: <%@ taglib prefix="fn" uri="http://java.su ...
- 【Solr】索引库查询界面详解
目录 索引库查询界面详解 回到顶部 索引库查询界面详解 q:主查询条件.完全支持lucene语法.还进行了扩展. fq:过滤查询.是在主查询条件查询结果的基础上进行过滤.例如:product_pric ...
- c/c++ 标准库 插入迭代器 详解
标准库 插入迭代器 详解 插入迭代器作用:copy等函数不能改变容器的大小,所以有时copy先容器是个空的容器,如果不使用插入迭代器,是无法使用copy等函数的. 例如下面的代码就是错误的: list ...
随机推荐
- 错误:java.lang.NoClassDefFoundError: com/project/common/exception/ServiceException 的解决
问题: 项目编译通过,启动报错误信息java.lang.NoClassDefFoundError: com/project/common/exception/ServiceException. 解决方 ...
- android 页面的切换
startActivity后加:IntentHelper.jump(mContext, MyBalanceActivity.class);activity.overridePendingTransit ...
- thinkphp5踩坑之部署到服务器模板不存在
一个项目部署到Linux服务器上去的时候,发现某些模板竟然会报错说"模板不存在:/Application/Admin/-.", 解决方法:网上有说是因为使用$this->fe ...
- wamp图标为黄色(非端口号问题)
1.Win键+R 输入:services.msc 进入服务,找到wamp,看哪个服务没有启动 2.手动启动apache服务失败,弹出以下错误 3.然后在cmd命令行中切换到你的apache的bin目 ...
- angular中要注意的指令
1.ng-repeat 遍历集合,给每个元素生成模板实例,每个实例的作用域中可以用一些特殊属性,如下: $index //遍历集合的下标 $first //遍历集合中的第一个对象 $last //遍历 ...
- Win10微软帐户切换不回Administrator本地帐户的解决方法--(转,虽转但亲测有效)
在Win10系统中经常会用到微软帐户登录,如应用商店等地方,不过一些用户反馈原来使用Administrator帐户被绑定微软帐户后无法切换回本地帐户,连[改用本地帐户登录]按钮都没有,那么怎么解决呢? ...
- [codility] Lession1 - Iterations - BinaryGap
Task1: A binary gap within a positive integer N is any maximal sequence of consecutive zeros that is ...
- 关于css选择器的一些细节
1.如何区分一个html标签的不同样式 使用标签名.类名的方式解决 如果希望特别强调其中的某一个或几个元素,处理的方案有三个: 1.id选择器 2.class选择器 3.层级选择器 看下面的代码: & ...
- Django框架初识
一.安装: pip3 install django 注意pip加入环境变量,安装好以后记得把Django加入环境变量 安装完成后,会在python目录下多了两个文件:1个django文件,1个 ...
- BZOJ 2916: [Poi1997]Monochromatic Triangles [计数]
题意:空间中有n个点,任意3个点不共线.每两个点用红线或者蓝线连接,如果一个三角形的三边颜色相同,那么称为同色三角形.给你一组数据,计算同色三角形的总数. 考虑补集,异色三角形 每个点的边红色和蓝色两 ...