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

标签 java jquery ajax jsp struts2

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

我正在使用 Ajax 调用来注册用户,注册后我可以在 Ajax 调用的成功函数中获取成功消息。但它没有根据 struts.xml 结果重定向到其他 JSP type=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()

Action 类方法:

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>

最佳答案

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

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

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

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

关于java - 如何在 Struts 2 中使用 Ajax 调用获得成功结果后重定向到另一个 JSP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23579939/

相关文章:

c# - 使用 JQuery Ajax 和 ASP.NET 通用处理程序时必须采取的除 XSS 和 CSRF 预防之外的安全措施

javascript - 如何使用javascript刷新弹出窗口

java - RequestDispatcher.forward() 到 "/WEB-INF"下的资源在 WebSphere 中不起作用

javascript - 响应后在 HTML 中附加未知文本

java - 如何修复致命异常 : java. lang.IndexOutOfBoundsException 索引 : 0, 大小:1

c# - jquery 的 ASP.NET MVC Form 和 serializeArray() 用 false 覆盖复选框的状态

javascript - 使用特定 ID 更新文本框

javascript - 将 steam 应用列表加载为 JSON 文件

java - 使用 Hive 清理大数据

java - JAXB 编码和解码避免命名空间