【问题标题】:Redirect to LogOff Page in case of Failure in Ajax call在 Ajax 调用失败的情况下重定向到注销页面
【发布时间】:2015-02-17 08:58:32
【问题描述】:

如果 Struts2 Action 类中有任何错误,我想将我的请求重定向到 LogOff 页面。 我正在对 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);
                                }
});

如果会话被验证,我正在验证,将响应发送回 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>

它不工作,它应该像这样工作吗? 或者我们还有什么可以在 Struts2 中实现同样的效果。

【问题讨论】:

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

标签: java jquery ajax jsp struts2


【解决方案1】:

而不是从服务器重定向,因为您正在使用 AJAX 进行异步调用,所以这不起作用。您需要做的是从您的成功方法重定向,通过发送一个指定您要重定向的错误条件的值。在下面的例子中,我将“RedirectURL”作为返回的 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);
                            }
      }
});

您也可以在调用的“失败”方法中执行此操作,方法是从服务器抛出异常。这样,所有异常都会重定向到您想要的页面。

   $.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.
          }
    });

【讨论】:

    猜你喜欢
    • 2015-10-20
    • 1970-01-01
    • 2018-12-20
    • 1970-01-01
    • 2013-10-12
    • 2017-08-17
    • 2019-05-28
    • 2014-01-04
    • 2018-05-17
    相关资源
    最近更新 更多