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

时间:2014-05-10 10:32:47

标签: java jquery ajax jsp struts2

我正在使用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>

3 个答案:

答案 0 :(得分:1)

login包中创建default操作,结果返回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

答案 1 :(得分:1)

首先,如果你想在成功注册的不同页面上进行操作,为什么要使用ajax?

因为ajax的主要用途是在没有刷新的情况下加载数据,但是在这里你将用户发送到下一页,这意味着结果页面将重新加载;那么为什么要使用ajax这种情况呢?

更好的方法是使用普通的Struts2动作调用。

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

答案 2 :(得分:-2)

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