【发布时间】:2014-08-24 18:35:40
【问题描述】:
我正在尝试在 Spring MVC 中实现以下场景。但我遇到了问题,无法决定正确的方法。 我正在使用 jsonRequest/jsonResone(Restful Webservices)
1.我有一个 SignUP.jsp 表单,其中包含一些需要提交给控制器的字段。
<form method="POST" onsubmit="javascript:signupObj.signup()">
<table>
<tr>
<td>Username : </td>
<td><input id="username"/></td>
</tr>
<tr>
<td>Password :</td>
<td><input id="password"/></td>
</tr>
<tr>
<td>
<button type="submit">Submit</button>
</td>
</tr>
</table>
</form>
2.onSubmit表单会调用下面提到的注册javascript函数
var signupObj = {
showSignup : function() {
//There are Two Ways to Declare Function The Other Way is function showSignup().Checkout the reasons
$.ajax({
type: "GET",
url: "showSignup",
success: function(response) {
$("#signupView").html( response );
}
});
},
signup : function() {
alert("In Signup function");
var input = '{';
input += '"username":"'+$('#username').val()+'",';
input += '"password":"'+$('#password').val()+'"';
input += '}';
alert(input);
$.ajax({
type: "POST",
url : "signup",
contentType: "application/json; charset=utf-8",
data: input,
dataFilter: function (response) {
return response;
},
// crossDomain: true,
async:false,
success: (function(data) {
alert("In ajax Sucess");
alert(data.profileID);
signupObj.redirectview("success",data);
}),
error : function(data,textStatus,error){
alert("In ajax Failure");
alert(error);
signupObj.redirectview("failure",data);
},
dataType: "json"
});
alert("ajax finished");
},
redirectview : function(message,data) {
alert("inside redirect view");
if(message == "success"){
url = "success";
}
else{
url = "error";
}
$.ajax({
type: "POST",
url : "success",
contentType: "application/json; charset=utf-8",
data: data,
async:false,
dataType: "json",
dataFilter: function (response) {
return response;
},
// crossDomain: true,
success: (function(data) {
alert("data");
}),
error : function(data,textStatus,error){
alert("In ajax Failure redirect");
alert(error);
},
}); }
};
3.上面的javascript函数对控制器进行ajax调用(输入为jsonRequest)
@RequestMapping(value="/signup",method=RequestMethod.POST)
@ResponseBody
public ProfileDTO signup(@RequestBody LoginDTO loginDTO) {
ProfileDTO profileDto = new ProfileDTO();
//In case no errors in backend logic
profileDto.setError(null);
profileDto.setProfileID("profileID");
profileDto.setProfileName("profileName");
System.out.println("Submitting SignUP Form Will Return ProfileID");
return profileDto;
}
//Below method is for success view
@RequestMapping(value="/success",method=RequestMethod.POST)
@ResponseBody
public String checkSignup(@RequestBody ProfileDTO profileDto,HttpServletRequest httprequest,HttpServletResponse httpResponse
) {
//model.addAttribute(loginDTO);
System.out.println("In loginSuccess");
return "loginSucess";
}
4.Controller给出profileDTO的JSON Response。现在基于 profileDTO.getErrors 我必须调用 loginSuccess.jsp 或 loginFailure.jsp
现在我的问题是:
1) 如何在 ajax 调用中使用 jsonResponse 重定向到 loginSuccess.jsp 或 loginFailure.jsp,以及如何将我的 profileDTO 数据传递到 loginSuccess 视图。
2.)请建议我应该遵循的最佳实践。
【问题讨论】:
标签: java javascript ajax json spring-mvc