ajax發起action時觸發攔截器

來源:互聯網
上載者:User

標籤:ajax   攔截器   

    做項目的時候遇到了一個問題   當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;    @Overridepublic String intercept(ActionInvocation invocation) throws Exception {// TODO Auto-generated method stubSystem.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{@Overridepublic 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();}elsereturn Action.LOGIN;}</span><span style="color:#ff0000;">}</span>


以上就是這些了  ,  問題是決解了  , 但是覺得不是很滿意   ,希望有人分享經驗

        

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.