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>


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

        

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值