2014-05-10 31 views
1

我正在使用Struts 2來註冊用戶。如何在Struts 2中使用Ajax調用獲得成功後重定向到另一個JSP

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

動作類方法:

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> 

回答

1

創建在default包返回一個login.jsp作爲結果的login動作。

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

上成功處理程序,如果你想你爲什麼要使用Ajax去不同的網頁上註冊成功使用的代碼

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

},//End of success function in ajax call 
1

首先的?

因爲ajax的主要用途是在不刷新的情況下加載數據,但在這裏您將用戶發送到下一頁,這意味着結果頁將要重新加載;那麼爲什麼要使用ajax來處理這種情況呢?

所以更好的方法是使用普通的Struts2動作調用。

一個建議是使用('formId').serialize()('formId').serializeArray()方法來獲取表單參數,而不是通過id得到每個參數。

-2

我同意上面的回答Roman C,如果你想重定向你的頁面,不要使用ajax調用,只需正常提交你的表單,它會將你重定向到你在struts.xml中聲明的jsp。

相關問題