- 浏览: 308843 次
最新评论
-
nucleus:
为什么都是没有图的。。。。。。。求图片啊
《研磨struts2》第七章 值栈和OGNL 之 7.4 ActionContext和ServletActionContext -
nucleus:
为什么都是没有图的。。。。。。。求图片啊
《研磨struts2》第七章 值栈和OGNL 之 7.4 ActionContext和ServletActionContext -
nucleus:
为什么都是没有图的。。。。。。。求图片啊
《研磨struts2》第七章 值栈和OGNL 之 7.4 ActionContext和ServletActionContext -
nucleus:
为什么都是没有图的。。。。。。。求图片啊
《研磨struts2》第七章 值栈和OGNL 之 7.4 ActionContext和ServletActionContext -
hunanjun000:
《研磨struts2》第四章 Action 之 4.5 Action的其它重要知识
19.2.1模拟长时间运行的Action
为了示例,首先来模拟一个运行时间长的Action:在这个Action中首先定义了一个int类型的progress属性及其getter/setter,用来向外界返回当前任务的完成进度。在execute方法中,让Action所在的线程在每次循环的时候sleep一秒钟,每次循环把进度加十。
这样,随着外界不断访问progress属性,就可以知道当前任务运行的进度了。示例代码如下:
- public class WaitAction extends ActionSupport{
- /**
- * 准备向等待页面返回工作的进度
- */
- private int progress;
- public int getProgress() {
- return progress;
- }
- public void setProgress(int progress) {
- this.progress = progress;
- }
- public String execute() throws Exception {
- //循环十次,每次线程睡1秒,且进度加10
- for (int i=0;i<10;i++){
- Thread.sleep(1000L);
- progress += 10;
- }
- return SUCCESS;
- }
- }
19.2.2配置Action
首先,在配置Action的时候,要让这个Action引用execAndWait拦截器,而且,这个拦截器会中止声明在它以后的拦截器的执行,因此这个拦截器的引用要出现在defaultStack拦截器栈之后。
其次,还要为这个Action声明一个名称为wait的Result,由它来指定具体的等待页面。示例代码如下:
- <package name="helloworld" extends="struts-default">
- <action name="waitAction" class="cn.javass.wait.WaitAction">
- <interceptor-ref name="defaultStack"/>
- <interceptor-ref name="execAndWait"/>
- <result>/wait/success.jsp</result>
- <result name="wait">/wait/wait.jsp</result>
- </action>
- </package>
19.2.3实现“进度条”页面
由于HTTP页面在显示之后,不会再与服务器交互,所以,要不断的刷新这个“进度条”页面才行。
可以简单的使用<html>标签中的<meta>标签来设置这个页面不断进行自我刷新。示例代码如下:
- <%@ page language="java" contentType="text/html; charset=gb2312"
- pageEncoding="gb2312"%>
- <%@taglib prefix="s" uri="/struts-tags" %>
- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
- "http://www.w3.org/TR/html4/loose.dtd">
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
- <meta http-equiv="refresh" content="2;url=/helloworld/waitAction.action">
- <title>Insert title here</title>
- </head>
- <body>
- 您好,任务还未完成,已经运行到了任务的<s:property value="progress"/>%
- </body>
- </html>
<meta http-equiv="refresh" content="2;url=/helloworld/waitAction.action">这句话代表了当前页面会在显示2秒之后访问” /helloworld/waitAction.action”这个URL。由于wait.jsp就是从这个Action中跳转出来的,所以就相当于每隔2秒就刷新一次wait.jsp页面。同样可以通过<s:property/>标签访问值栈。
19.2.4实现完成页面
实现一个完成页面,在完成页面中,简单的告知用户已经成功执行。示例代码如下:
19.2.5运行测试
在浏览器的地址栏输入“http://localhost:9080/helloworld/waitAction.action”,来直接访问waitAction。
在访问这个WaitAction的时候,第一次访问会使execute方法开始运行。但是,由于引用了execAndWait拦截器,并不是一直等到execute方法运行完之后再跳转到下一个页面,而是马上跳转到struts.xml中注册的名为wait的Result,也就是wait.jsp。
在wait.jsp中仍然可以访问值栈里面的值,因此,通过访问了progress属性来显示当前任务运行的进度。如下图所示:
图19.1 显示任务进度一
在wait.jsp,又指定了每隔2秒访问一次WaitAction,这时候,只要execute方法还没运行完,就马上再次转发到名为wait的Result,依次类推,直到execute方法运行完之后。因此页面显示的进度数据会一直增加,如图所示:
图19.2 显示任务进度二
因此,如果不引用execAndWait拦截器,在访问WaitAction的时候,本应该等到10秒后浏览器才有反应。但是,现在引用了execAndWait拦截器,在访问WaitAction的时候,马上跳转到了wait.jsp,而且每隔2秒刷新一次,直到10秒之后,直到execute方法运行完成,浏览器正确的跳转到success.jsp。如下图所示:
图19.3 任务结束
19.2.6图形化的进度条
看到这里,肯定有朋友会说,这哪里像是进度条啊,明明只是显示了一个运行进度而已。确实,从表现上看,不像我们熟悉的进度条,尤其是不像图形化的进度条。
1:JavaScript的图形化进度条
其实,要实现图形化的进度条也很简单,使用Javascript就可以很方便的实现。先看个最简单的Javascript的进度条的实现,示例代码如下:
- <%@ page language="java" contentType="text/html; charset=gb2312"
- pageEncoding="gb2312"%>
- <style type="text/css">
- #out{width:300px;height:20px;background:#EEE000;}
- #in{width:10px; height:20px;background:#0000ff;color:white;text-align:center;}
- </style>
- </HEAD>
- <BODY onload="start();" >
- <div id='out'>
- <div id="in" style="width:10%">10%</div>
- <div>
- <script type="text/javascript">
- var i=0;
- function start(){
- ba=setInterval("begin()",100);
- }
- function begin(){
- i+=1;
- if(i<=100){
- document.getElementById("in").style.width=i+"%";
- document.getElementById("in").innerHTML=i+"%";
- }else{
- clearInterval(ba);
- document.getElementById("out").style.display="none";
- document.write("进度条运行成功");
- }
- }
- </script>
- </BODY>
具体的Javascript的知识,这里就不去深入了,要注意下面几点:
- 进度条的效果是通过两个Div来实现的,id为out的div作为底框,id为in的div作为动态显示进度的进度框
- 启动方法是<body>元素的onload属性所指定的方法
- Start方法里面的setInterval(表达式,间隔时间),意思是:启动后,每隔指定的间隔时间,就执行前面的表达式一次,这个方法相当于一个定时器
- 在begin方法里面,通过动态的改变id为in的div框所包含的文字,从而实现动态显示进度的效果
- 运行到最后,一定要记得清除掉setInterval所设置的定时器,用的是clearInterval方法
当然,使用Javascript来实现进度条有很多种方式,这里只是其中的一种而已。
2:把Struts2的进度条图形化
接下来把前面的wait.jsp页面显示的进度,改成图形化的进度条的形式。
同样需要使用Javascript来图形化的显示进度条,只不过具体的进度数据应该从Struts2的waitAction中去获取,也就是直接把从Action中获取的进度数据,直接赋值给Javascript,然后通过Javascript来显示进度条。示例代码如下:
- <%@ page language="java" contentType="text/html; charset=gb2312"
- pageEncoding="gb2312"%>
- <%@taglib prefix="s" uri="/struts-tags" %>
- <html>
- <head>
- <style type="text/css">
- #out{width:300px;height:20px;background:#EEE000;}
- #in{width:10px; height:20px;background:#0000ff;color:white;text-align:center;}
- </style>
- <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
- <meta http-equiv="refresh" content="2;url=/helloworld/waitAction.action">
- <title>Insert title here</title>
- </head>
- <body>
- <BODY onload="start();" >
- <div id='out'>
- 您好,任务还未完成,已经运行到了任务的<div id="in" style="width:10%">10%</div>
- <div>
- <script type="text/javascript">
- function start(){
- ba=setInterval("begin()",100);
- }
- function begin(){
- var i = <s:property value="progress"/>;
- if(i<=100){
- document.getElementById("in").style.width=i+"%";
- document.getElementById("in").innerHTML=i+"%";
- }else{
- clearInterval(ba);
- document.getElementById("out").style.display="none";
- document.write("进度条运行成功");
- }
- }
- </script>
- </BODY>
- </html>
最重要的变化就在加粗的那句话,把从Action获取的数据直接设置给了Javascript,要注意这个过程是在服务端完成的,到了客户端,值已经设置好了,因此Javascript同样能正常地运行。
运行URL:http://localhost:9080/helloworld/waitAction.action,测试一下看看效果,如下图所示:
图19.4 Struts2的进度条图形化
进度条会不断滚动,直到运行结束,转向success.jsp为止。
私塾在线网站原创《研磨struts2》系列
转自请注明出处:【http://sishuok.com/forum/blogPost/list/0/4174.html】
欢迎访问http://sishuok.com获取更多内容
发表评论
-
研磨struts2 目录贴
2012-08-24 12:12 163321.1 《研磨struts2》 第一章 Struts2 ... -
跟着cc学设计 之 研磨设计模式 视频教程 出炉了
2012-08-15 07:16 2研磨设计模式——跟着CC学设计系列精品课程,上线了! ... -
研磨struts2 目录
2012-07-30 21:15 2471.1 《研磨struts2》 第一章 Strut ... -
研磨struts2 目录
2012-07-30 16:54 361.1 《研磨struts2》 第一章 Stru ... -
《研磨struts2》A.2 struts.properties的配置 之 A.2.1 概述
2012-07-09 12:10 3055A.2.1 概述 如果我们希望覆盖在 ... -
《研磨struts2》附录A Struts2的配置 之 A.1 struts.xml的配置
2012-07-09 12:10 2710A.1 struts.xml的配置 A.1.1 ... -
《研磨struts2》第二十一章 零配置 之 21.3 通过注解来实现零配置
2012-07-06 08:07 291021.3 通过注解来实现零配置 21.3.1 ... -
《研磨struts2》第二十一章 零配置 之 21.2 约定大于配置
2012-07-05 10:44 245721.2 约定大于配置 21.2.1 约定 ... -
《研磨struts2》第二十一章 零配置 之 21.1 概述
2012-07-05 10:44 231121.1 概述 21.1.1 零配置概述 在 ... -
《研磨struts2》第二十章 整合SiteMesh 之 20.3 整合Struts2与SiteMesh
2012-07-04 08:15 2072在Struts2中使用SiteMesh ... -
《研磨struts2》第二十章 整合SiteMesh 之 20.2 单独使用SiteMesh
2012-07-03 08:00 209120.2 单独使用SiteMesh 20. ... -
《研磨struts2》第二十章 整合SiteMesh 之 20.1 调整应用的风格
2012-07-03 07:59 185320.1 调整应用的风 ... -
《研磨struts2》第十九章 进度条 之 19.1 使用“进度条”告知用户进度
2012-07-02 12:23 214019.1 使用“进度条”告知用户进度 ... -
《研磨struts2》第十八章 结合JFreeChart 之 18.3 Struts2结合JFreeChart
2012-06-28 12:12 199918.3 Struts2结合JFreeChart ... -
《研磨struts2》第十八章 结合JFreeChart 之 18.2 Struts2插件概述
2012-06-28 12:11 2020Struts2并没有求大求全,企图把所有 ... -
《研磨struts2》第十八章 结合JFreeChart 之 18.1 JFreeChart使用
2012-06-20 15:48 227718.1 JFreeChart使用 18.1.1概 ... -
研磨struts2(1-10章)电子书下载
2012-06-19 07:30 6056研磨struts2的博客文章 私塾在线学习网 《研 ... -
《研磨struts2》第十七章 防止重复提交 之 17.3 更强大的tokenSession拦截器
2012-06-18 13:46 206717.3 更强大的tokenSession拦截器 ... -
《研磨struts2》第十七章 防止重复提交 之 17.2 使用标签
2012-06-18 13:45 233217.2 使用<s:token/>标签 ... -
《研磨struts2》第十七章 防止重复提交 之 17.1 什么是重复提交
2012-06-18 13:45 214417.1 什么是重复提交 所谓重复提交,就是用户在 ...
相关推荐
- SQL 编辑器:支持编写、调试和运行 SQL 语句,自动完成功能提高编写效率。 - 数据查看:提供数据网格视图,可以查看、编辑和导出数据库中的数据。 - PL/SQL 开发:支持 PL/SQL 存储过程、函数和触发器的编写和...
rpm,Linux版本可用.Version 19.2.1.247.2212 - September 12, 2019
19.2.5 观看长时间运行程序的输出 479 19.3 打开伪终端设备 480 19.3.1 SVR4 481 19.3.2 4.3+BSD 482 19.4 pty_fork函数 484 19.5 pty程序 486 19.6 使用pty程序 489 19.6.1 utmp文件 489 19.6.2 作业控制交互 489 ...
标题中的"pip-19.2.1.tar.gz"指的是Python的一个重要包管理工具pip的19.2.1版本的源代码压缩包,它采用tar.gz格式进行封装。pip是Python生态系统中不可或缺的一部分,它使得安装、升级和管理Python库变得极其便捷。 ...
在平面直角坐标系中,我们使用一对有序数对(x, y)来确定平面内的任何点的位置。这个系统由两条互相垂直的直线组成,通常称为x轴和y轴,它们相交于一点,称为原点(0, 0)。在坐标系中,x轴正方向一般指向右,y轴正...
2. 打开命令提示符或PowerShell,定位到包含`Twisted-19.2.1-cp37-cp37m-win_amd64.whl`的目录。 3. 输入以下命令来安装Twisted: ``` pip install Twisted-19.2.1-cp37-cp37m-win_amd64.whl ``` 运行此命令后,...
7. 函数性质的综合应用:第19题中,两个正比例函数 y = (m+2)x 和 y = (2m-3)x 分别随 x 增大而增大和减小,意味着 m+2 > 0 且 2m-3 ,解得 -2 < m < 3/2,因为 m 是整数,所以 m 的可能值为 -1, 0, 1。 总结来说,...
Twisted-19.2.1-cp27-cp27m-win_amd64.whl,用于不想下载VC++14运行库,pipi install Twisted-19.2.1-cp27-cp27m-win_amd64.whl 直接安装
2. **构造平行四边形的方法**:通过三角形的顶点作对边的平行线,可以构造出多个平行四边形。例如第1题,从一个三角形的三个顶点出发,可以得到四个平行四边形。 3. **全等三角形的识别**:在平行四边形中,可以...
湖北省武汉市八年级数学下册19.2一次函数19.2.1正比例函数2导学提纲无答案新版新人教版
Twisted-19.2.1-cp35-cp35m-win_amd64.whl,用于不想下载VC++14运行库,pipi install Twisted-19.2.1-cp35-cp35m-win_amd64.whl 直接安装
该资源为pip-19.2.1-py2.py3-none-any.whl,欢迎下载使用哦!
第18题中,通过实际问题判断关系是否为一次函数或正比例函数,如汽车行驶距离与时间的关系是典型的线性关系。第19题和第20题分别探讨了函数y=(m+3)x^{|m+2|}和y=kx的m和k值,以确保它们是正比例函数。第21题涉及正...
2. **选择题分析**: - 选择题1-4考察了正比例函数的定义和性质,例如函数形式是否正确,以及 k 值如何影响函数图像的位置和增减性。 - 选择题5-6测试了正比例函数图像与不同象限的关系,以及如何根据点的位置判断...
2. **Python 3.7**:Python是一种流行的高级编程语言,版本3.7是其众多版本之一,引入了许多新特性和改进,如类型注解的增强、新的数据类、更友好的错误消息等。 3. **CPython和ABI**:"cp37m"是CPython(Python的...
Twisted-19.2.1-cp37-cp37m-win32.whl
19.2.1.247.2212-no-jre.zip" 文件是 SQL Developer 的一个特定版本,该版本号表示它是在 2019 年发布,版本号为 19.2.1,构建号为 247,补丁号为 2212,且"no-jre"意味着这个压缩包不包含Java运行环境(JRE),这...
Twisted-19.2.1-cp38-cp38m-win_amd64.whl,用于不想下载VC++14运行库,pipi install Twisted-19.2.1-cp38-cp38m-win_amd64.whl 直接安装
Twisted- python3.7 Twisted-19.2.1-cp37-cp37m-win_amd64.whl