AJAXリクエストと通常のリクエストでエラーを異なる方法で処理したいと思います。
Struts2アクションでリクエストがAJAXであるかどうかを識別するにはどうすればよいですか?
AJAXリクエストと通常のリクエストでエラーを異なる方法で処理したいと思います。
Struts2アクションでリクエストがAJAXであるかどうかを識別するにはどうすればよいですか?
リクエストヘッダーX-Requested-With
が存在し、に等しいかどうかを確認する必要がありXMLHttpRequest
ます。
すべてのAJAXリクエストにこのヘッダーがあるわけではないことに注意してください。たとえば、Struts2 Dojo
リクエストはヘッダーを送信しません。Struts2-jQuery
代わりに(または他の新しいAJAXフレームワークを使用して)AJAX呼び出しを生成している場合は、そこにあります。
Firebug's Net module
たとえば、Stack Overflowに投票するときに、...を使用して存在するかどうかを確認できます;)
内からチェックするには、インターフェイスStruts2 Action
を実装してから、を取得し、その特定のヘッダーが次のように存在するかどうかを確認する必要があります。ServletRequestAware
Request
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();
私が使用するもう1つの方法は、パラメーターajax =trueをすべてのAjaxURL文字列に追加し、isAjax()メソッドを使用してアクションでテストすることです。