做项目的时候遇到了一个问题 当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