Java Ajax调用失败时重定向到注销页面
如果Struts2操作类中有任何错误,我想将请求重定向到注销页面。 我正在从db.jsp对struts操作进行ajax调用,在这里我验证会话变量。 我希望用户在db.jsp上获得ajax响应,若会话已验证,则重定向到logoff.jsp 我对db.jsp的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
$.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的代码示例所示