1. 对于 如何 在 Jsp页面 使用 ajax
把所有的 foreach 数据 依次 传递 到 action页面的 技术
最 常见的 就是 一张卷子 让你 做,。 你提交答案, 给 action 评分
这是十分的 复杂的 技术 ,
2. jsp 页面: 把 动态变化的 题目id 放在 foreach里面, 于是 每一行都会变化
<form action="" method="post">
<input type="text" name="papId" hidden="hidden" value="${paper.papId }">
<c:forEach var="test" items="${tests }" varStatus="idx">
<div class="panel panel-default">
<div class="panel-heading">
${idx.index+1 }. ${test.testTitle }(${test.score }分) ----- 这是 题目名称
</div>
<div class="panel-body" style="padding-top:0px;">
<span class="${test.testId }"></span> 每一个题目都会 在它 的前面显示
<script type="text/javascript">
var answer='${test.testName }'; 题目 的选项都是: 我,你,他
var shu=new Array(); 所以 用 split(‘,’) 分成数组
shu=answer.split(",");
for(var i=0;i<shu.length;i++){
var an=null;
if(i==0){an="A. "} 加 ABCD ---全单选
if(i==1){an="B. "}
if(i==2){an="C. "}
if(i==3){an="D. "}
if(i==4){an="E. "}
var name="."+'${test.testId }'; 给每一个 题目 加唯一标识
var ans="<input type='radio' style='margin-left:20px;' name='"+'${test.testId }'+"' value='"+shu[i]+"'/> "+an+shu[i]+" ";
$(name).before(ans);
}
</script>
</div>
</div>
</c:forEach>
<input type="button" value="交卷"/>
</form>
然后 就是 ajax 代码
$("input[type='button']").click(function(){
var data=$("form").serializeArray(); 把 form 表单 里面的 值 全部 转化为
var url="exercise_giveScore"; input里面的 name :padid value : padname
alert(JSON.stringify(data));
$.ajax({
url:url,
data:data,
dataType:"json",
type:"POST",
success: function(msg){
alert(JSON.stringify(msg));
},
error:function(){
alert("提交出错,稍后再试");
}
});
});
});
5. 最重要的 就是 action里面
private String tallscore;
public String giveScore(){
try {
//获取题目 这个 就是 input 在form里面 name=papId 的 value
List<Test> tests=postTextbooksMapService.getTest( this.getRequest().getParameter ("papId") );
//总分
tallscore=0;
for(Test t:tests){
if( this.testIsRingth(t)){
tallscore+=t.getScore();
}
}
System.out.println("--总分--"+tallscore);
}
public boolean testIsRingth(Test t){
//获取学生答案
if(this.getRequest().getParameter(t.getTestId())==null){ 白卷 对 错
return false;
}else if(t.getAnswer().equals( this.getRequest().getParameter(t.getTestId()).trim())){
return true;//回答正确
}else{
String s=this.getRequest().getParameter(t.getTestId());
System.out.println("--我的答案--"+s);
return false;
}