繁体   English   中英

在Struts 2中使用Ajax调用获得成功结果后,如何重定向到另一个JSP

[英]How to redirect to another JSP after getting success result using Ajax call in Struts 2

我正在使用Struts 2来注册用户。

我正在使用Ajax调用来注册用户,获得注册后,我能够在Ajax调用的成功功能中获取成功消息。 但是它不会基于struts.xml结果type=success重定向到其他JSP。

register.jsp

<s:form id="form">
     <s:textfield name="email" id="email" label="Email" required="true" onkeyup="loadXMLDoc()" onblur="userNameCheck()"></s:textfield>
     <s:textfield name="mobile" id="mobile" label="Mobile"></s:textfield>
     <s:textfield name="username" id="username" readonly="true"
      label="Username"></s:textfield>
     <s:textfield name="first_name" id="first_name"
      label="First Name"></s:textfield>
     <s:textfield name="last_name" id="last_name"
      label="Last Name"></s:textfield>
     <s:password name="password" id="password" label="Password"></s:password>
     <s:password name="uconfirm_password" id="confirm_password"
      label="Confirm"></s:password>
     <div class="button">
      <input type="reset" name="cancel" id="cancel" value="Cancel">
      <input type="submit" name="save" id="save" value="Save">
     </div>
    </s:form>

Ajax呼叫:

$.ajax({ // Ajax function to call the action 
    type : 'POST',
    contentType : 'application/json',
    url : 'user',
    dataType : "html",
    data : registerFormToJSON(),
    success : function(html) {
        alert("Successfully Registered");

    },//End of success function in ajax call

    error : function(err) {

        console.log("Fail");
        return true;
    } //End of error function in ajax call
});
return false;
}
});


function registerFormToJSON() {

    var data = JSON.stringify({

        "userbean" : {
            "username" : $("#username").val(),
            "password" : $("#password").val(),
            "firstname" : $("#first_name").val(),
            "lastname" : $("#last_name").val(),
            "confirmpassword" : $("#confirm_password").val(),
            "email" : $("#email").val(),
            "mobile" : $("#mobile").val(),

        }

    }); //End of getting form values and storing in json variable
    alert(data);
    return data;

}//End of function registerFormToJSON()

动作类方法:

public class UserController implements Action {
    private UserBeans userbean;

    /**
     * @return the userbean
     */
    public UserBeans getUserbean() {
        return userbean;
    }

    /**
     * @param userbean
     *            the userbean to set
     */
    public void setUserbean(UserBeans userbean) {
        this.userbean = userbean;
    }

    @Override
    public String execute() {
        return SUCCESS;
    }

    public String register() {
        UserService service = new UserServiceImpl();
        userbean = service.addorUpDateUser(userbean);
        // response.setContentType("json");
        return ActionSupport.SUCCESS;
    }
}

DAO类方法:

public UserBeans addOrUpdateUser(UserBeans userBean) {
    properties.load(inputStream);
    con = conn.createConnection();
    System.out.println("name is mine" + userBean.getUsername());
    String encryptedPassword = PasswordUtil.encryptPassword(userBean.getPassword());
    String query = properties.getProperty("users_query");
    System.out.println(query);
    System.out.println("connection:" + con);
    preparedstatement = con.prepareStatement(query);
    preparedstatement.setString(1, userBean.getUsername());
    preparedstatement.setString(2, encryptedPassword);
    preparedstatement.setString(3, userBean.getEmail());
    preparedstatement.setString(4, userBean.getFirstname());
    preparedstatement.setString(5, userBean.getLastname());
    preparedstatement.setString(6, userBean.getMobile());
    preparedstatement.setString(7, userBean.getConfirmpassword());
    preparedstatement.executeUpdate(); // execute insert statement
    logger.info("UserDaoImpl  addOrUpDate Ends");
    return userBean;
}

struts.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
   "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
   "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
    <constant name="struts.action.extension" value="," />
    <package name="default" extends="struts-default,json-default"
        namespace="/">
        <action name="users" class="com.sample.controller.UserController"
            method="register">
            <interceptor-ref name="defaultStack" />
            <interceptor-ref name="json">
                <param name="enableSMD">true</param>
            </interceptor-ref>
            <result name="success" type="json">/login.jsp</result>
        </action>
</package>
</struts>

default包中创建一个login操作,该操作将返回一个login.jsp结果。

<action name="login">
   <rerult>/login.jsp</result>
</action>

在成功处理程序上使用代码

success : function(html) {
    alert("Successfully Registered");
    window.location = '<s:url namespace="/" action="login"/>';

},//End of success function in ajax call

首先,如果要在成功注册时转到其他页面,为什么要使用ajax?

因为ajax的主要用途是不刷新就加载数据,但是这里您要将用户引导到下一页,这意味着结果页将要重新加载。 那么为什么要在这种情况下使用ajax?

因此,更好的方法是使用常规的Struts2操作调用。

一种建议是使用('formId').serialize()('formId').serializeArray()方法获取表单参数,而不是通过id获取每个参数。

我同意Roman C的上述回答,如果要重定向页面,不要使用ajax调用,只需正常提交表单,它将把您重定向到在struts.xml中声明的jsp。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM