`
master3003
  • 浏览: 46943 次
社区版块
存档分类
最新评论

ajax action 不跳转

 
阅读更多
Ext结合Struts的Session超时处理
博客分类: Ext
EXTStrutsAjaxUIJavaScript
配置struts.xml文件的默认拦截器(注:登录的action用<default-interceptor-ref name="defaultStack" />)

Xml代码 
<interceptors> 
     <interceptor name="loginInterceptor" class="com.fireinjava.ui.interceptor.LoginInterceptor" /> 
     <interceptor-stack name="myDefaultIntegerceptor"> 
           <interceptor-ref name="loginInterceptor" />   
           <interceptor-ref name="defaultStack" /> 
     </interceptor-stack> 
</interceptors> 
          
<default-interceptor-ref name="myDefaultIntegerceptor" /> 

<interceptors>
     <interceptor name="loginInterceptor" class="com.fireinjava.ui.interceptor.LoginInterceptor" />
     <interceptor-stack name="myDefaultIntegerceptor">
           <interceptor-ref name="loginInterceptor" />
           <interceptor-ref name="defaultStack" />
     </interceptor-stack>
</interceptors>

<default-interceptor-ref name="myDefaultIntegerceptor" />

拦截器LoginInterceptor.java

Java代码 
package com.fireinjava.ui.interceptor;  
 
import java.io.IOException;  
import java.io.PrintWriter;  
import java.util.Map;  
 
import javax.servlet.http.HttpServletResponse;  
 
import org.apache.struts2.ServletActionContext;  
 
import com.fireinjava.ui.UserEnv;  
import com.opensymphony.xwork2.Action;  
import com.opensymphony.xwork2.ActionContext;  
import com.opensymphony.xwork2.ActionInvocation;  
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;  
 
/** 
* @version 1.0 
* @data 2009-9-23 
* @描述:检查Session是否超时 
*/ 
public class LoginInterceptor extends AbstractInterceptor {  
 
    @Override 
    public String intercept(ActionInvocation actioninvocation) throws Exception {  
        ActionContext context = actioninvocation.getInvocationContext();  
        Map session = context.getSession();  
        UserEnv user = (UserEnv) session.get("userEnv");  
        System.out.println(">>>>>>>>>>>>>LoginInterceptor");  
        if (user != null) {  
            return actioninvocation.invoke();  
        } else {  
            outString("<script type=\"text/javascript\">var session='SessionExpired'; function getRootWin(){var win = window;while (win != win.parent){win =win.parent;}return win;} getRootWin().reLogin();</script>");//页面接收  
        }  
        return Action.NONE; // 页面上写一个Login弹出窗口  
    }  
 
    public void outString(String str) {  
        HttpServletResponse response = ServletActionContext.getResponse();  
        try {  
            response.setHeader("Pragma", "No-cache");  
            response.setHeader("Cache-Control", "no-cache");  
            response.setDateHeader("Expires", 0);  
            response.setContentType("text/html;charset=gbk");  
            PrintWriter out = response.getWriter();  
            out.write(str);  
            out.flush();  
            out.close();  
        } catch (IOException e) {  
            e.printStackTrace();  
        }  
    }  
 


package com.fireinjava.ui.interceptor;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Map;

import javax.servlet.http.HttpServletResponse;

import org.apache.struts2.ServletActionContext;

import com.fireinjava.ui.UserEnv;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;

/**
* @version 1.0
* @data 2009-9-23
* @描述:检查Session是否超时
*/
public class LoginInterceptor extends AbstractInterceptor {

@Override
public String intercept(ActionInvocation actioninvocation) throws Exception {
ActionContext context = actioninvocation.getInvocationContext();
Map session = context.getSession();
UserEnv user = (UserEnv) session.get("userEnv");
System.out.println(">>>>>>>>>>>>>LoginInterceptor");
if (user != null) {
return actioninvocation.invoke();
} else {
outString("<script type=\"text/javascript\">var session='SessionExpired'; function getRootWin(){var win = window;while (win != win.parent){win =win.parent;}return win;} getRootWin().reLogin();</script>");//页面接收
}
return Action.NONE; // 页面上写一个Login弹出窗口
}

public void outString(String str) {
HttpServletResponse response = ServletActionContext.getResponse();
try {
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
response.setContentType("text/html;charset=gbk");
PrintWriter out = response.getWriter();
out.write(str);
out.flush();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}

} jsp 页面代码:

 

Js代码 
<script type="text/javascript">  
 
function getRootWin(){     
    var win = window;     
    while (win != win.parent){     
        win = win.parent;     
    }     
    return win;     
}     
 
var reLoginWin;  
 
reLogin = function (){ getRootWin().reLoginWin=new Ext.Window(....);}//登录窗口  
 
Ext.Ajax.on('requestcomplete', function(conn, response, options, e){  var returnVal=response.responseText;  if(!Ext.isEmpty(returnVal)&&returnVal.indexOf('SessionExpired')!=-1)   reLogin();});  
 
</script> 

<script type="text/javascript">

function getRootWin(){  
    var win = window;  
    while (win != win.parent){  
        win = win.parent;  
    }  
    return win;  
}  

var reLoginWin;

reLogin = function (){ getRootWin().reLoginWin=new Ext.Window(....);}//登录窗口

Ext.Ajax.on('requestcomplete', function(conn, response, options, e){  var returnVal=response.responseText;  if(!Ext.isEmpty(returnVal)&&returnVal.indexOf('SessionExpired')!=-1)   reLogin();});

</script>


 

嵌入外部页面时,保持本应用的Session激活

function keepSession(){
     Ext.Ajax.request({url : 'keepSession.action'});
}
setInterval("keepSession()",60000);//1分钟调用下



<action name="keepSession" class="com.xx.BaseAction" method="keepSession"/>

public void keepSession(){

}

分享到:
评论
1 楼 oo_key 2012-08-13  
好乱的代码呀,要看好久才看明白,可读性太差了。且还没试过你的代码。

相关推荐

    Ajax中responseText返回的是一个页面而不是一个值

    如果在action中只进行业务逻辑不需要跳转页面的可以将String 类型改为void。这样返回的就不是整个页面了。 您可能感兴趣的文章:ajax的responseText乱码的问题的解决方法jquery ajax学习笔记2 使用XMLHttpRequest...

    ajax如何实现页面局部跳转与结果返回

    通过代码示例分析给大家介绍...点击提报按钮后,通过ajax来实现跳转到action中处理,JavaScript代码为: function tibao(){ var id=''; var URL = &lt;select:link page="/smokeplan.do?method=Tibao&idset="/&gt;+id;

    vue ajax 拦截原理与实现方法示例

    在开发的过程中,我们需要通过AJAX请求,访问后台获取数据,这个获取数据的时候,当然需要后台需要时登录状态才能访问数据,当没有登录的情况,这个时候我们需要跳转到登录界面进行登录。 如果每次请求都要做如下...

    利用ajax提交form表单到数据库详解(无刷新)

    优点是不刷新页面,不跳转页面,静默提交的。 至于什么是ajax,自己去百度了解。 首先我们得要有一个表单提交页面: index.html 这个页面由两个部分组成 1、表单控件 2、jQuery+ajax处理脚本 jQuery脚本会获取...

    java命名规范 开发规范

    通用式Ajax调用与页面跳转统一模型; 5. 响应一个请求的分层结构约定,列举几个示例(常规调用、Ajax调用、WebService调用、提供WebService暴露、硬件设备接口调用); 6. 验证代码质量的约定,如JUnit、EMMA、...

    解决django中form表单设置action后无法回到原页面的问题

    django中form表单设置action后,点提交按钮是跳转到action页面的,比如设置action为login,网址为192.168.1.128,跳转后便会来到192.168.1.128/login,F5刷新也会是重新提交表单对话框,无法回到原页面。 因此就要在...

    dangdang和smartstruts2.rar

    1)跳转到 /user/register_form.jsp &lt;action name="register" class="action.user.RegistFormAction"&gt; &lt;result name="form"&gt;/user/register_form.jsp &lt;/action&gt;完善action。 &lt;action name="image" class="action...

    OA办公自动化管理系统(Struts1.2+Hibernate3.0+Spring2+DWR)130224.rar

    它通过ActionForm和Action类来实现数据的传递和处理,同时利用配置文件struts-config.xml来管理页面跳转和Action之间的映射关系。Hibernate3.0作为持久层框架,负责与数据库进行交互。它通过ORM(对象关系映射)技术...

    网上商城需求报告

    1)跳转到 /user/register_form.jsp &lt;action name="register" class="action.user.RegistFormAction"&gt; &lt;result name="form"&gt;/user/register_form.jsp &lt;/action&gt;完善action。 &lt;action name="image" class="action...

    当当网全套源码(附带邮箱验证功能)

    不正确在verify_form.jsp提示“验证失败” c.跳转到register_ok.jsp 3.用户登录 1)表单验证 邮箱:非空、格式 密码:非空 2)Action逻辑 a.检测Email和密码是否正确,失败回到login_form.jsp提示 b.检测is_...

    个人博客系统【Spring3+Hibernate3+Struts2】【SSH】

    11) 文章查询:通过Action跳转获取所有文章信息,进行异步加载剩余文章 12) 文章、评论点赞:通过Ajax直接传入相关文章或评论ID,进行更新 13) 追加评论:对文章进行评论,并通过Ajax进行提交保存。

    css3实现可滑动跳转的分页插件示例

    这款分页插件不仅可以点击分页按钮来实现分页,而且可以滑动滑杆来实现任意页面的跳转,看看都非常酷,很适合一些个性化的个人网站使用,当然,这款分页插件也适合ajax翻页,效果都挺不错的。先来看看效果图: 怎么...

    MF00617-JAVA餐厅点餐管理源码.zip

    注意:不带技术支持,有帮助文件,虚拟商品,发货不退,看好再拍。 开发语言 : JAVA 数据库 : MySQL 开发工具 : Eclipse 源码类型 : WebForm 运行环境:jdk7+tomcat8+mysql+myeclipse 使用技术:spring+Struts+...

    Javascript 阻止浏览器默认操作的实现代码

    在很多时候,我们需要改变这些默认操作,比如:点击一个链接时,我们执行一些 ajax 操作,但是我们并不希望执行跳转动作,于是,就有了本文:阻止浏览器默认操作。 其实这并不是一个非常难的课题,单独拿出来的原因...

    window.open()实现post传递参数

    在实际项目中,常常遇到这样的需求,即实现子系统页面之间跳转并在新的页面打开,我所在项目组使用的是SSH框架,所以url均为类似****.action,同时还带有两参数(系统ID与系统名称),两个参数被struts拦截后存入...

    Spring shiro + bootstrap + jquery.validate 实现登录、注册功能

    输入用户名、密码(validate进行前端验证)——ajax调用后台action方法——根据用户名调用业务层到数据层查询数据库信息——查询的密码跟用户输入的密码比对——shiro登录身份验证——将用户信息存入session——响应...

    ARCH4系统开发指南

    而不跳转页面 82 3 页面多行录入的处理方案 83 3.1 概述 83 3.2 设计思想 84 3.3 方法调用顺序 85 3.3.1 点击增加按钮时 85 3.3.2 点击删除按钮时 85 3.4 Javascript API 85 3.4.1 insertRow 85 3.4.2 deleteRow 85 ...

    java web 视频、电子书、源码(李兴华老师出版)

    17.5、Action深入 17.5.1、ForwardAction 17.5.2、IncludeAction 17.5.3、DispatchAction 17.6、验证框架 附录A:实用工具 18.1、JavaMail 18.1.1、James邮件服务器的下载及配置 18.1.2、JavaMail...

    amis前端低代码框架 v1.1.4

    拆解 factory.tsx,添加 RootRenderer,并能 处理部分 action, 直接渲染个按钮也能弹窗,发ajax了 (#1425) Text 配置 source 样式优化 (#1429) 更换 autobind,继承时 this 不错乱 (#1433) Bugfix 修复 表单项...

    李兴华 Java Web 开发实战经典_带源码_高清pdf 带书签 上

    17.5、Action深入 17.5.1、ForwardAction 17.5.2、IncludeAction 17.5.3、DispatchAction 17.6、验证框架 附录A:实用工具 18.1、JavaMail 18.1.1、James邮件服务器的下载及配置 18.1.2、JavaMail简介及配置...

Global site tag (gtag.js) - Google Analytics