我正在使用 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>
首先,如果您想在成功注册后进入不同的页面,为什么要使用ajax?
因为ajax的主要用途是在不刷新的情况下加载数据,但在这里您将用户发送到下一页,这意味着结果页面将重新加载;那么为什么要在这种情况下使用ajax呢?
所以更好的方法是使用普通的 Struts2 动作调用。
一个建议是使用
('formId').serialize()
或 ('formId').serializeArray()
方法来获取表单参数,而不是通过 id
获取每个参数。
在
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
我同意上面的答案,Roman C,如果你想重定向你的页面,不要使用ajax调用,只需正常提交你的表单,它就会将你重定向到你在struts.xml中声明的jsp。