我有问题。我使用ajax成功地将index
值从JSP传递给控制器。当我点击“通过”时按钮,'索引'值正在增加,并使用ajax成功传递给控制器。根据这个索引,我将list [index]添加到model。(带model.addAttribute
)尽管我在JSP中使用了${nextWord}
,但我在视图中看不到这个值。我该如何解决?谢谢你的回答。
控制器
private List<Map<String, Object>> list;
@RequestMapping(value="/practice/{category}", method = RequestMethod.GET)
public String practicePageStart(@PathVariable("category") String category,
ModelMap model, HttpSession session){
// return 10 value from DB. Example;
// [{idWord=1},{word='exampleWord'},{meaning='turkishMeaning'},{type='NOUN'}]
list = wordService.getRandomWords(Integer.parseInt(String.valueOf(session.getAttribute("wordCount"))));
model.addAttribute("wordList", list);
return "practiceCategory";
}
@RequestMapping(value="/practice/{category}", method = RequestMethod.POST)
public String practicePagePost(@PathVariable("category") String category,
@RequestParam("index") int index, ModelMap model, HttpSession session){
model.addAttribute("nextWord", list.get(index).get("word"));
return "practiceCategory";
}
JSP
<script>
$(document).ready(function() {
$('#pass').click(function(event) {
var inputIndex = $('#index').val();
$.ajax({
type: "POST",
url: "${pageContext.request.contextPath}/practice/${category}",
async: false,
data: { index: inputIndex }
complete: function(){
alert("${nextWord}");
$('#label').text("${nextWord}");
}
});
document.getElementById("index").value = (parseInt(document.getElementById("index").value) + 1).toString();
});
});
</script>
答案 0 :(得分:1)
使用@ResponseBody并返回对象而不是返回ViewResolver。
返回ViewResolver将解析视图并在执行Ajax调用时发送html内容。因此,如果您只需要价值,则不建议使用。
@ResponseBody示例
public @ResponseBody Integer retriveValue(-,-,-){
return Integer.valueOf(5);
}
答案 1 :(得分:1)
在我看来,你混合不同: (1)rendring阶段(servlet容器 - 后台 - java)vs. (2)在浏览器中运行(js,此处不存在请求属性)。
你需要另一个jsp文件来渲染数据。或者你在practicePagePost
方法中将其作为json返回。
@ResponseBody
@RequestMapping(value="/practice/{category}", method = RequestMethod.POST)
public String practicePagePost(@PathVariable("category") String category,
@RequestParam("index") int index, ModelMap model, HttpSession session){
return list.get(index).get("word");
}
答案 2 :(得分:1)
将您的控制器方法更改为:
@RequestMapping(value="/practice/{category}", method = RequestMethod.POST)
@ResponseBody
public String practicePagePost(@PathVariable("category") String category,
@RequestParam("index") int index, ModelMap model, HttpSession session){
return list.get(index).get("word");
}
你的阿贾克斯:
$.ajax({
type: "POST",
url: "${pageContext.request.contextPath}/practice/${category}",
async: false,
data: { index: inputIndex }
success: function(data){
alert(data);
$('#label').text(data);
}
});