ajax发起action时触发拦截器

    做项目的时候遇到了一个问题   当ajax发起action时触发拦截器时返回值在拦截其中就更没有接收到一样不会发起跳转 , 而用pos表单t提交的时候是可以的

    纠结了很久现在找到了一个方法, 感觉不是很科学 ,  能实现   希望哪位好心人看到过后能给下高手的解决办法

    

     可行的解决办法如下:

            struts2 配置如下:

                          

<span style="font-size:12px;"><span style="color:#ff0000;">        </span><span style="color:#330033;">  <package name="register" namespace="/" extends="json-default">

		<interceptors>
			<interceptor name="methodInterceptor" class="nwsuaf.intercept.MethodInterceptor" />
			<interceptor-stack name="register">
				<interceptor-ref name="defaultStack" />
				<!--调用自定义拦截器 -->
				<interceptor-ref name="methodInterceptor" />
			</interceptor-stack>
		</interceptors>
		<default-interceptor-ref name="register" />
		<global-results>
			<result name="nologin" type="json">
				<param name="includeProperties">nologin</param>
			</result>
		</global-results></span></span>
<span style="font-size:12px;color:#330033;">         </package>
</span>
<span style="font-size:12px;color:#330033;">
        <package name="defaulddd" namespace="/" extends="register">   //注意这里是继承了上面的包名

		<action name="insertfocus" class="nwsuaf.action.systemService.FocusAction"
			method="insert">
			<result name="insertfocus" type="json">
				<param name="includeProperties">message</param>
			</result>
		</action>
	</package></span>

JS代码如下:

             

<span style="font-size:14px;"><span style="color:#330033;">function focusInsert(detailid,liketype)
{
	var uid = document.getElementById("idaaa").value;
	//alert(uid);
			  if(confirm("确认关注此条信息?")){
				  $.post("insertfocus.action",   //下面参数的名称自己可以改   

					{"mfocus.uid":uid,"mfocus.detailid":detailid,"mfocus.liketype":liketype},
						  function(result){
							  if(result == null){
								  alert('系统错误');
								  return false;
							  }else if(result.nologin){
								  alert("您尚未登录,请登录后继续操作...");
							  }
							  else {
								  alert("关注成功");
								  location.reload();
							  }
						  },
			 			'json'
			 		);
			 	}
}
	</span><span style="color:#ff6600;">	</span></span>

             拦截器的.java类如下:

              

<span style="font-size:14px;color:#330033;">package nwsuaf.intercept;  

import javax.servlet.http.HttpServletResponse;

import org.apache.struts2.ServletActionContext;

import nwsuaf.bean.LoginBean;

import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;  

public class MethodInterceptor extends AbstractInterceptor {  

    /**
	 * 拦截器
	 */
	private static final long serialVersionUID = 1L;

	@Override
	public String intercept(ActionInvocation invocation) throws Exception {
		// TODO Auto-generated method stub
		System.out.println("拦截器起作用了!");
        LoginBean u=(LoginBean) ActionContext.getContext().getSession().get("loginedUser");
        if(u!=null){
        	System.out.println("拦截器u!=null:::"+u);
            return invocation.invoke();
        }
        System.out.println("拦截器u=null:::"+u);
       // HttpServletResponse response = ServletActionContext.getResponse();
        //response.getWriter().println("{\"nolgoin\":true}");
        return "nologin";
	}
}  </span>

             action类如下:

 

<span style="font-size:14px;color:#330033;">public class FocusAction extends BaseAction {   </span>
<span style="font-size:14px;color:#330033;"> //action中的方法其实不用改,只需要给添加一个标志字段就好  注意一定要有set方法
	private boolean nologin=true;</span>

       全局的拦截器:

             

<span style="font-size:14px;color:#330033;"><package name="myPackage" namespace="/" extends="struts-default">
		<interceptors>
			<interceptor name="LoginInterceptor"
				class="biz.cld.framework.interceptor.LoginInterceptor" />
			<interceptor-stack name="myStack">
				<interceptor-ref name="defaultStack" />
				<!--调用自定义拦截器 -->
				<interceptor-ref name="LoginInterceptor" />
			</interceptor-stack>
		</interceptors>
		<default-interceptor-ref name="myStack" />
		<global-results>
			<result name="login">/EC/user/userLogin.jsp</result>   </span><span style="font-size:14px;color:#ff0000;">//这里和上面是由区别的 所有需要实现拦截器的只需要继承“myPackage”这个包就可以了</span><span style="font-size:14px;color:#330033;">
		</global-results>
	</package></span>

<span style="color:#330033;">public class LoginInterceptor extends AbstractInterceptor{

	@Override
	public String intercept(ActionInvocation arg0) throws Exception {

		Map session=arg0.getInvocationContext().getSession();
		User user=(User)session.get("user");
		System.out.println(user);
		if(user!=null){
			return arg0.invoke();
		}
		else
		return Action.LOGIN;
	}</span><span style="color:#ff0000;">

}</span>

以上就是这些了  ,  问题是决解了  , 但是觉得不是很满意   ,
希望有人分享经验

ajax发起action时触发拦截器

时间: 2024-10-11 18:38:11

ajax发起action时触发拦截器的相关文章

Struts2拦截器详解

作者:禅楼望月 1. Struts2内置拦截器 Struts2内置了大量的拦截器,如下图: 图片来自:刘水镜的博客:菜鸟学SSH(四)--Struts2拦截器 这些拦截器以name-class的形式配置在struts-default.xml中: <interceptor name="alias" class="com.opensymphony.xwork2.interceptor.AliasInterceptor"/> <interceptor n

浅谈Struts2的拦截器

拦截器:       在谈拦截器之前,我觉得有必要提一下和过滤器的区别.     1. 首先拦截器是Struts2自己的,只有用了Struts2框架才可以使用拦截器,而过滤器是servlet规范中的一部分,任何java web工程都可以使用: 2. 其次拦截器只可以拦截Action,而过滤器理论上可以拦截任何东西(jsp,html,css,image或者js等). 拦截器配置(在Struts2.xml中进行): 1 <package name="default" extends=

认识拦截器

认识拦截器 什么是拦截器 拦截器也是一个类 拦截器可以在Action被调用之前和之后执行代码 框架的很多核心功能是拦截器实现的 拦截器特点 拦截器自由组合,增强了灵活性.扩展性,有利于系统解耦 拦截器可以拦截Action请求 在访问的Action执行之前和执行之后执行代码实现某项功能 在哪儿使用拦截器 Struts2: 大部分功能是在拦截器中实现的 如:接收输入的参数.数据验证.文件上传.国际化等 应用程序: 需要在Action执行的前后执行特定功能时 Action执行时间统计,Action访问

[原创]java WEB学习笔记64:Struts2 学习之路--Struts的CRUD操作( 查看 / 删除/ 添加) ModelDriven拦截器 paramter 拦截器

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

ModelDriven 和 Preparable 拦截器

首先了解Params 拦截器 作用:Parameters 拦截器将把表单字段映射到 ValueStack 栈的栈顶对象的各个属性中. 如果某个字段在模型里没有匹配的属性, Param 拦截器将尝试 ValueStack 栈中的下一个对象 把表单的值赋给栈顶对象的属性   此时栈顶对象即为 Action 在实际的使用中我们想  把 Action 和 Model 清晰地隔离开是有必要的: 有些 Action 类不代表任何Model 对象, 它们的功能仅限于提供显示服务 问题:所以我要在Params

spring 18-Spring框架拦截器简介

拦截器是在用户和具体操作的Action之间做一个屏障 保证提交到Action上的数据是真实有效的数据 实现拦截器的操作处理接口:org.springframework.web.servlet.HandlerInterceptor public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception:在某一个控制器的方法执行之前调用 pu

java web 过滤器跟拦截器的区别和使用

1.首先要明确什么是拦截器.什么是过滤器 1.1 什么是拦截器: 拦截器,在AOP(Aspect-Oriented Programming)中用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作.拦截是AOP的一种实现策略. 在Webwork的中文文档的解释为--拦截器是动态拦截Action调用的对象.它提供了一种机制可以使开发者可以定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行.同时也是提供了一种可以提取action中可重用的部分的方式.

【struts2】预定义拦截器

1)预定义拦截器 Struts2有默认的拦截器配置,也就是说,虽然我们没有主动去配置任何关于拦截器的东西,但是Struts2会使用默认引用的拦截器.由于Struts2的默认拦截器声明和引用都在这个Struts-default.xml里面,因此我们需要到这个文件的struts-default包里去看一下.定义如下: 1 <interceptors> 2 <interceptor name="alias" class="com.opensymphony.xwor

拦截器 过滤器 监听器 的区别

面试的时候突然被问了这么个问题 本来知道点啥的 脑子一热 啥也没说出来总结一下 以下内容均摘自网络 但是 读完之后 应该会对它们有更清晰的认识.1.1 什么是拦截器: 拦截器,在AOP(Aspect-Oriented Programming)中用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作.拦截是AOP的一种实现策略. 在Webwork的中文文档的解释为--拦截器是动态拦截Action调用的对象.它提供了一种机制可以使开发者可以定义在一个action执行的前后执行的代码,也