项目的要求是:点击页面上的查询按钮以后,在BackingBean的事件方法中查询数据,如果查询时间超过预设值则跳转到超时页面。
比如:预设的超时时间为20秒,点击查询以后20秒一到,如果还没有查出结果,网页立即跳转到超时页面。我原来的想法是,在方法开始的时候记录系统时间,然后在方法结束以后再获得系统时间,然后将两个时间的差与预设值进行比较,超过就跳转。但是这样有个缺陷,就是必须等方法完全执行完毕后才可以跳转,没法达到一到时就自动跳转的功能。
后来我想使用线程,利用Timer来进行计时,然后到时触发事件停止查询、自动跳转,但是JSF的机制不是很熟,好像在新开的线程里没法控制事件方法的线程,也就没法实现跳转。
不知道大家有没有在项目中遇到过类似的需求,都是怎样解决的。希望能给我一些建议,谢谢!
比如:预设的超时时间为20秒,点击查询以后20秒一到,如果还没有查出结果,网页立即跳转到超时页面。我原来的想法是,在方法开始的时候记录系统时间,然后在方法结束以后再获得系统时间,然后将两个时间的差与预设值进行比较,超过就跳转。但是这样有个缺陷,就是必须等方法完全执行完毕后才可以跳转,没法达到一到时就自动跳转的功能。
后来我想使用线程,利用Timer来进行计时,然后到时触发事件停止查询、自动跳转,但是JSF的机制不是很熟,好像在新开的线程里没法控制事件方法的线程,也就没法实现跳转。
不知道大家有没有在项目中遇到过类似的需求,都是怎样解决的。希望能给我一些建议,谢谢!
解决方案 »
- Struts2 项目报错,java.io.IOException: Server returned HTTP response code: 500 for UR
- java.io.FileNotFoundException 求解决 上传至万网服务器的错误
- 2种请求的区别
- oci控件里面的事件怎么调用呀
- 急救问题啊..~!在线等
- 怎样开发带中间件的3层应用程序?
- 关于jsp页面上使用ResultSet的问题
- 郁闷......请高手指点.........................
- 新站刚开不久,急需人气,爱好java的多支持下
- 有谁用过JSP/JAVA的正则表达式的?
- J2SDK+Apache+Tomcat配置的问题?
- 下周未攻击jsp网站 大家给点意见
然后用以各方法来监视他的执行状况如果在20秒内 环境变量没有变为true
就return 到一个叶里
问题刚刚解决了,还是用javax.swing.Timer来负责计时,然后在到时触发的ActionListener的actionPerformed方法里用到
FacesContext.getCurrentInstance().getExternalContext().dispatch("Timeout.faces");
FacesContext.getCurrentInstance().responseComplete();
timer.stop();
这样就可以了。帖子改散分贴吧 ^_^
我觉得可以考虑考虑javascript。不过我要看晚会去了,你自己考虑吧。88
一开始我也这么想的,先在方法里用Thread.currentThread()得到当前线程后,在timer的线程里面调用interrupt(),但是结果是即使interrupt()也没反应,可能我的理解还有问题。
不过我js很烂的,跟不懂没什么区别 :(
而且既然项目是用JSF来实现的,那么还是在sever这端来解决问题才是正道,我是这么想的。
或者其他 并发 异常?
所以现在只是实现了到时跳转,但是并没有结束后台的处理。
因为刚接触,JSF的机制不太了解,强行使用interrupt方法可能破坏了JSF的线程管理
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class MySessionListner implements HttpSessionListener{
//private static Log log = LogFactory.getLog(UserSessionListener.class); public void sessionCreated(HttpSessionEvent evt) {
//log.info("new Session created");
System.out.println("@@@@@@@@@ Begin a new session@@@@@@@@@@@@@@");
HttpSession currentSession=(HttpSession)evt.getSession();
System.out.println(currentSession.getAttribute("user"));
} public void sessionDestroyed(HttpSessionEvent evt) {
System.out.println("@@@@@@@@@ Destroy a session@@@@@@@@@@@@@@");
HttpSession currentSession=(HttpSession)evt.getSession();
System.out.println(currentSession.getAttribute("user"));
} }
<listener-class>listeners.MySessionListner</listener-class>
</listener>,之后凡是jsp页面上生成的session,在销毁前,都会被捕捉到,你在这时进行跳转就行了。