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

问题描述 投票:0回答:3

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

我正在使用 Ajax 调用来注册用户,注册后,我可以在 Ajax 调用的

success
函数中获取
success
消息。但它没有被重定向到另一个 JSP,基于
struts.xml
结果
success

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>
java jquery ajax jsp struts2
3个回答
1
投票

首先,如果您想在成功注册后进入不同的页面,为什么要使用ajax?

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

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

一个建议是使用

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


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

-2
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.