我对java世界比较陌生。我正在使用Spring (使用4.0.2) Maven.
1)我有jsp文件,它将json数据A发送给控制器(POST)。
2)然后,Controller(方法)根据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’
或
===>返回"mypage“和jsp中的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(解决方案的简单注释)我不需要通过model.addAttribute传递距离值。
当我发布时控制器中的update方法有字符串返回值(public @ResponseBody String update.),所以我只需要将字符串(这里的“距离”)返回给jsp。
然后在jsp中,'ajax:‘部件将得到与成功控制器’距离‘的返回,这是两种方法都指出的。如下所示:
success: function(response){
$('#distance_result').text(response);最后,刷新距离值的地方..。
<p style="color:red; font-size: 12pt">Distance: <span id="distance_result">${distance}</span></p>效果很好。
发布于 2015-04-27 20:24:15
你不能那样做。您正在尝试动态更改已从服务器加载的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);
}发布于 2015-04-27 20:23:13
在您的代码中,您可以进行Ajax调用,而不是标准请求。因此,页面mypage返回到Ajax成功函数:
success: function(json) {
//alert('succeed!');
} ),作为已呈现的html,但页面不会刷新。我认为您应该只返回一个JSON,甚至一个简单的字符串,然后在success函数中解析它。然后你可以用新的值来代替旧的值。或者,您可以在Ajax成功后重定向到同一个页面,以刷新页面,或者不进行Ajax调用,而是进行标准的POST请求。
https://stackoverflow.com/questions/29904577
复制相似问题