【发布时间】:2015-07-06 10:15:51
【问题描述】:
我对 java 世界比较陌生。 我正在使用 Spring MVC(使用 4.0.2)Maven...
1) 我有将 json 数据 [A] 发送到控制器 (POST) 的 jsp 文件
2) 然后,Controller(method) 根据来自 jsp 的数据计算另一个值
3)我需要通过model.addAtrribute将另一个值(计算结果)[B]返回给jsp。
但它不会按型号返回。这是我的代码。
在 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
}
我已经简化了我的代码,因为响应、解析部分工作正常。
我认为(我的怀疑部分)有问题:
===> 'method=RequestMethod.post' 和 'model.addAttribute'
或
===>在jsp中返回“mypage”和[B1]部分
如果有人能指出我做错了什么,真的很感激。
======================= 解决了!!!! ======================
我在这里添加我的解决方案,以防万一, 如果有人也需要使用这种技术....
感谢@willysama 和@misko321 提供了很好的答案并指出了哪些可以做哪些不能做,并提供了示例代码。
【解决方案】
在控制器中(最终解决方案)
@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
}
在JSP文件中(最终解决方案)
$.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
(解决方案的简单 cmets) 我不需要通过model.addAttribute传递距离值。
我发布时控制器中的更新方法具有字符串返回值(公共@ResponseBody String更新......), 所以我只需要将字符串(这里是'距离')返回给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>
效果很好。
【问题讨论】:
标签: java spring jsp maven model-view-controller