9

AJAXリクエストと通常のリクエストでエラーを異なる方法で処理したいと思います。

Struts2アクションでリクエストがAJAXであるかどうかを識別するにはどうすればよいですか?

4

2 に答える 2

25

リクエストヘッダーX-Requested-Withが存在し、に等しいかどうかを確認する必要がありXMLHttpRequestます。

すべてのAJAXリクエストにこのヘッダーがあるわけではないことに注意してください。たとえば、Struts2 Dojoリクエストはヘッダーを送信しません。Struts2-jQuery代わりに(または他の新しいAJAXフレームワークを使用して)AJAX呼び出しを生成している場合は、そこにあります。

Firebug's Net moduleたとえば、Stack Overflowに投票するときに、...を使用して存在するかどうかを確認できます;)

内からチェックするには、インターフェイスStruts2 Actionを実装してから、を取得し、その特定のヘッダーが次のように存在するかどうかを確認する必要があります。ServletRequestAwareRequest

public class MyAction extends ActionSupport implements ServletRequestAware {
   private HttpServletRequest request;

   public void setRequest(HttpServletRequest request) {
      this.request = request;
   }

   public HttpServletRequest getRequest() {
      return this.request;
   }

   public String execute() throws Exception{
      boolean ajax = "XMLHttpRequest".equals(
                      getRequest().getHeader("X-Requested-With"));
      if (ajax)
         log.debug("This is an AJAX request");
      else 
         log.debug("This is an ordinary request");

      return SUCCESS;
   }  
}

ServletRequestAwareインターフェースを実装せずに、ActionContextを介して要求を取得することもできますが、これは推奨される方法ではないことに注意してください。

HttpServletRequest request = ServletActionContext.getRequest();
于 2013-01-31T10:53:19.557 に答える
3

私が使用するもう1つの方法は、パラメーターajax =trueをすべてのAjaxURL文字列に追加し、isAjax()メソッドを使用してアクションでテストすることです。

于 2013-01-31T14:43:54.010 に答える