当前位置: 首页 > 工具软件 > JSEL > 使用案例 >

JS遍历EL表达式中的List解决办法

施飞驰
2023-12-01

  首先贴一下我原来的代码。

  

 for(var i=0;i<number;i++){
		   console.log("content:"+array[i]);
		   var content = '${questionList[""+i+""].content}';//中间双重引号,原因暂时不是很清楚
		   var options = '${questionList[""+i+""].options}';
		   var questionId = '${questionList[""+i+""].id}';
		   console.log("questionId:"+questionId+"; content:"+content);
		   var optionArray = new Array();
		   optionArray = options.split(";  ");
		   
  		   qstr = qstr + "<table><thead><tr><th>"+(i+1)+":"+content+"</th></tr></thead><tbody><tr><td><ul>"
                       + " <li><label><input type=\"checkbox\"  name=\""+questionId+"\" value=\"A\">"+optionArray[0]+"</label></li>"
                       + " <li><label><input type=\"checkbox\"  name=\""+questionId+"\" value=\"B\">"+optionArray[1]+"</label></li>"
                       + " <li><label><input type=\"checkbox\"  name=\""+questionId+"\" value=\"C\">"+optionArray[2]+"</label></li>"
                       + " <li><label><input type=\"checkbox\"  name=\""+questionId+"\" value=\"D\">"+optionArray[3]+"</label></li>"                   
                       + "</ul></td></tr></tbody></table></br>";  
           //注意,上面复选框的name=questionId
	   }
	   
	   document.getElementById("questionDiv").innerHTML=qstr;
  这个代码出现了一个问题,就是说我在每次list中的值时,会很奇怪地每次都只取第一个值。

  极度郁闷,暂时不清楚是什么原因,不过已经找到了替代的解决办法。

  等下会贴出来。

  想到一个解决办法是利用jsp中的jstl标签(博主使用的jsp哦)

  下面是修改后的代码:

  

var number = ${questionList.size()}; 
	   var qstr = "";
	   var arrayContent = new Array();  
	   <c:forEach items="${questionList}" var="t">  
	     arrayContent.push("${t.content}"); //js中可以使用此标签,将EL表达式中的值push到数组中  
	   </c:forEach>
	   
	   var arrayOptions = new Array();  
	   <c:forEach items="${questionList}" var="t">  
	     arrayOptions.push("${t.options}"); //js中可以使用此标签,将EL表达式中的值push到数组中  
	   </c:forEach> 
	     
	   var arrayQuestionId = new Array();  
	   <c:forEach items="${questionList}" var="t">  
	     arrayQuestionId.push("${t.id}"); //js中可以使用此标签,将EL表达式中的值push到数组中  
	   </c:forEach> 
	   
	   for(var i=0;i<number;i++){
/* 		   var content = '${questionList[""+i+""].content}';//中间双重引号,原因暂时不是很清楚
		   var options = '${questionList[""+i+""].options}';
		   var questionId = '${questionList[""+i+""].id}'; */
		   var content = arrayContent[i];
		   var options = arrayOptions[i];
		   var questionId = arrayQuestionId[i]; 
		   console.log("questionId:"+questionId+"; content:"+content);
		   var optionArray = new Array();
		   optionArray = options.split(";  ");
		   
  		   qstr = qstr + "<table><thead><tr><th>"+(i+1)+":"+content+"</th></tr></thead><tbody><tr><td><ul>"
                       + " <li><label><input type=\"checkbox\"  name=\""+questionId+"\" value=\"A\">"+optionArray[0]+"</label></li>"
                       + " <li><label><input type=\"checkbox\"  name=\""+questionId+"\" value=\"B\">"+optionArray[1]+"</label></li>"
                       + " <li><label><input type=\"checkbox\"  name=\""+questionId+"\" value=\"C\">"+optionArray[2]+"</label></li>"
                       + " <li><label><input type=\"checkbox\"  name=\""+questionId+"\" value=\"D\">"+optionArray[3]+"</label></li>"                   
                       + "</ul></td></tr></tbody></table></br>";  
           //注意,上面复选框的name=questionId
	   }
	   
	   document.getElementById("questionDiv").innerHTML=qstr;

    嗯,这样虽然是复杂了一些,不过总算是将所有的数据都显示出来了。

    


 类似资料: