我对java世界比较陌生。 我正在使用Spring MVC(使用4.0.2)Maven ...
1)我有jsp文件,它将json数据[A]发送到控制器(POST)
2)然后,Controller(方法)根据来自jsp
的数据计算另一个值3)我需要通过model.addAtrribute将另一个值(计算结果)[B]返回给jsp。
但它没有按型号返回。这是我的代码。
$.ajax({
url:'/mypage.html',
data: 'left=' + left +'&right='+ right, ----[A1]
type:"POST",
success: function(json){
//alert('succeed!');
}
});
.........
.........
<p style="color:red; font-size: 12pt">Distance: ${distance}</p> --- [B1]
所以现在控制器:
@RequestMapping(value="/mypage", method = RequestMethod.POST)
public @ResponseBody String update(@RequestBody String response, Model model) {
String left = … response parsing…...; ---[A2] //works fine
String right = … response parsing...; -----[A2] //works fine
String distance = getDistance(left, right); // [B2] is calculated for distance based on [A2], works fine
model.addAttribute("distance", distance); --- [B2]
Return "mypage"; // [B2] should be delivered to [B1] (in jsp) and display ${distance} value
}
我简化了我的代码,因为响应,解析部分工作正常。
我认为(我的怀疑部分)是错误的:
===&GT; 'method = RequestMethod.post'和'model.addAttribute'
或
===&GT;返回“mypage”和[B1]部分在jsp中
如果有人能够指出我做错了什么,真的很感激。
======================解决了!!!! =====================
我在这里添加我的解决方案,以防万一, 如果有人也需要使用这种技术....
感谢@willysama和@ misko321以获得良好的答案&amp;指出什么可以和不可以,并提供示例代码。
[解决方案]
@RequestMapping(value="/mypage", method = RequestMethod.POST)
public @ResponseBody String update(@RequestBody String response) {
String left = … response parsing…...;
String right = … response parsing...;
String distance = getDistance(left, right); //e.g. distance = 100
return distance; // simply return String value of distance
// don't need to have model.addAttribute
}
$.ajax({
url:'/mypage.html',
data: 'left=' + left +'&right='+ right,
type:"POST",
success: function(response){ // here should be 'response'
//here gets from controller
alert('what I get?response='+response); //what I get? response=100
$('#distance_result').text(response); // to [1] for refreshing distance value
}
});
......
......
<p style="color:red; font-size: 12pt">Distance: <span id="distance_result">${distance}</span></p> // [1] refresh the distance value which returned from controller
(解决方案的简单评论) 我不需要通过model.addAttribute传递距离值。
我发布时控制器中的更新方法有String返回值(public @ResponseBody String update ....), 所以我只需要将String(这里是'distance')返回给jsp
然后在jsp中, 'ajax成功:'部分将获得@willysama和@ misko321指出的控制器成功返回'距离'。如下所示:
success: function(response){
$('#distance_result').text(response);
所以最后,刷新距离值的地方..
<p style="color:red; font-size: 12pt">Distance: <span id="distance_result">${distance}</span></p>
运作良好。
答案 0 :(得分:1)
在您的代码中,您进行Ajax调用,而不是标准请求。因此页面mypage
返回到Ajax成功函数:
success: function(json) {
//alert('succeed!');
} ),
作为已呈现的html,但页面未刷新。
我认为你应该只返回一个JSON甚至一个简单的String,然后在success
函数内解析它。然后,您可以使用新值替换旧值。
或者,您可以在Ajax成功之后重定向到同一页面以刷新页面或不进行Ajax调用,但是标准的POST请求。
答案 1 :(得分:1)
你不能这样做。您正在尝试动态更改已从服务器加载的jsp中的值。唯一的方法是在你的javascript中返回你的ajax调用。
将特定标记或类放在要异步设置值的位置:
<p style="color:red; font-size: 12pt">Distance: <span id="distance_result">${distance}</span></p>
更新您的成功函数以使用服务器的响应并在需要的地方进行设置:
success: function(json){
$('#distance_result').text(json.responseText);
}