Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Ajax调用失败时重定向到注销页面_Java_Jquery_Ajax_Jsp_Struts2 - Fatal编程技术网

Java Ajax调用失败时重定向到注销页面

Java Ajax调用失败时重定向到注销页面,java,jquery,ajax,jsp,struts2,Java,Jquery,Ajax,Jsp,Struts2,如果Struts2操作类中有任何错误,我想将请求重定向到注销页面。 我正在从db.jsp对struts操作进行ajax调用,在这里我验证会话变量。 我希望用户在db.jsp上获得ajax响应,若会话已验证,则重定向到logoff.jsp 我对db.jsp的Ajax调用如下: $.ajax({ type : "POST", url: "startapp", data:{ processDateInput: processDate,se

如果Struts2操作类中有任何错误,我想将请求重定向到注销页面。 我正在从db.jsp对struts操作进行ajax调用,在这里我验证会话变量。 我希望用户在db.jsp上获得ajax响应,若会话已验证,则重定向到logoff.jsp

我对db.jsp的Ajax调用如下:

  $.ajax({
          type : "POST",
          url: "startapp",
          data:{ processDateInput: processDate,secretToken:tokenLocal},
          dataType: "json",
          async: true,
          success: function(result) {
                                var od = JSON.stringify(result); 
                                var obj = JSON.parse(od);
                                var i = 0;
                                console.log(od);
                                }
});
我正在验证ere如果会话已验证,请将响应发送回Ajax,否则将重定向到LogOffRedirection.jsp页面,用户将从该页面注销应用程序:

    public class StartAppAction extends ActionSupport {

        private static Logger logger = Logger.getLogger(StartAppAction.class
                .getName());

        private static final long serialVersionUID = -367986889632883043L;
        private final static String SUCCESS = "success";
        private final static String FAILURE = "failure";

        // private ProcessDate pd = new ProcessDate();

        private Object od;
        private String processDateInput = null;
        private String secretToken=null;

        public String execute() throws Exception {

            HttpServletRequest request = ServletActionContext.getRequest();
            HttpServletResponse response = ServletActionContext.getResponse();
    try{
                if(null!=request.getSession().getAttribute("sesStrUID") && null!=secretToken){
                    if(!secretToken.trim().equals(request.getSession().getAttribute("sesStrUID").toString().trim())){
                        return FAILURE;

                    }

                   }
               }
               catch (Exception e) {
                   logger.error("Exception in token verification in Pre con action");
               }
        return SUCCESS;
        }
public String getProcessDateInput() {
        return processDateInput;
    }

    public void setProcessDateInput(String processDateInput) {
        this.processDateInput = processDateInput;
    }

    public Object getOd() {
        return od;
    }

    public void setOd(Object od) {
        this.od = od;
    }

    public String getSecretToken() {
        return secretToken;
    }

    public void setSecretToken(String secretToken) {
        this.secretToken = secretToken;
    }
Struts.xml我给出如下内容:

<action name="startapp" class="com.ge.wd.action.StartAppAction">
            <result name= "success" type="json"></result>
            <result name="failure">/jsp/LogOffRedirection.jsp</result>
        </action>

/jsp/LogOffRedirection.jsp
它不工作了,应该这样工作吗?
或者在Struts2中,我们是否还有其他方法可以实现同样的效果。

而不是从服务器重定向,因为您正在使用AJAX进行异步调用,因此重定向不起作用。您需要做的是从success方法重定向,方法是发送一个值,该值指定要重定向的错误条件。在下面的例子中,我将传递一个“重定向URL”,作为返回的JSON对象的根成员。如果它存在,那么您将重定向

例如

$.ajax({
      type : "POST",
      url: "startapp",
      data:{ processDateInput: processDate,secretToken:tokenLocal},
      dataType: "json",
      async: true,
      success: function(result) {
                            var od = JSON.stringify(result); 
                            var obj = JSON.parse(od);
                            var i = 0;
                            console.log(od);
                            if(obj.redirectUrl){
                                 window.location(obj.redirectUrl);
                            }
      }
});
您也可以在调用的“fail”方法中执行此操作,方法是从服务器抛出异常。这样,所有异常都将重定向到您想要的页面

   $.ajax({
          type : "POST",
          url: "startapp",
          data:{ processDateInput: processDate,secretToken:tokenLocal},
          dataType: "json",
          async: true,
          success: function(result) {
                                var od = JSON.stringify(result); 
                                var obj = JSON.parse(od);
                                var i = 0;
                                console.log(od);
          },
          fail: function(ex) {
              window.location(ExceptionRedirectUrl); //ExceptionRedirectUrl would be a global constant.
          }
    });

您的ajax调用总是希望收到json结果,因此如果服务器出现任何错误,客户端中的javascript对此一无所知。因此,请始终从您的操作发送json,并在其中添加一些标志,这样您就可以在客户端javascript中读取并处理它,正如@Justin Russo的代码示例所示