在我的servlet中,我正在创建一个多维数组,我试图在我的JSP中使用它来检查一些东西。这是我在servlet中的设置:
List<List<String>> tableList = new ArrayList<List<String>>();
for (String selectedItem : selectedItems)
{
String schedcombo = selectedItem;
Integer modifyScheduleNum = Integer.parseInt(schedcombo.substring(0,5));
Integer modifyContractYear = Integer.parseInt(schedcombo.substring(5,9));
String newStatus = request.getParameter("ModifyStatus_" + selectedItem);
String newStatusDate = request.getParameter("ModifyStatusDate_" + selectedItem) ;
System.out.println("Schedule Number being processed is " + modifyScheduleNum +
" with contract year of " + modifyContractYear +
" with modified status of " + newStatus +
" with modified Status Date of " + newStatusDate);
List<String> rowpull = new ArrayList<String>();
rowpull.add(schedcombo.substring(0,5));
rowpull.add(schedcombo.substring(5,9)) ;
rowpull.add(newStatus);
rowpull.add(newStatusDate);
tableList.add(rowpull);
request.setAttribute("preeditList",tableList) ;
}
我对处理过的数组进行了打印,看起来像这样:
添加到表中的表格的arraylist是:[[43080,2016,RP,2016-02-04]]
在JSP上我正在做我的表的循环,在循环内部我检查ArrayList以查看servlet中是否有进程。这是我的JSP代码:
for(var i=0; i<updateformID.selectedSched.length; i++)
{
var checkSchedule = document.getElementById("checkedTable").rows[i + 1].cells[1].innerHTML;
var checkYear = document.getElementById("checkedTable").rows[i + 1].cells[2].innerHTML;
alert("CheckSchedule being pulled outside the ForEach is " + checkSchedule) ;
<c:remove var="cksched"/>
<c:forEach items="${preeditList}" var="editTable">
<c:set var="cksched" value="${editTable[0]}" scope="request" />
alert("schedule number Inside the foreach loop " + <c:out value="${cksched}"/>) ;
<c:set var="ckeftyear" value="${editTable[1]}" scope="request" />
alert("eft contract year Inside the foreach loop " + <c:out value="${ckeftyear}"/>) ;
<c:set var="ckstatus" value="${editTable[2]}" scope="request" />
alert("sched status Inside the foreach loop " + <c:out value="${ckstatus}"/>) ;
<c:set var="ckstatusDate" value="${editTable[3]}" scope="request" />
<c:if test="${cksched == checkSchedule}">
<c:set var="checkfound" value="YES" scope="request"/>
</c:if>
</c:forEach>
alert ("The checkfound variable after the foreach is " +
<%= request.getAttribute("checkfound") %> ) ;
}
在进行屏幕调试时,当我到达 ckstatus 字段的警告消息时,它无法说明'RP'未定义。前两个正确显示。
我的问题是,当我添加到 rowpull 数组时,我没有正确地将其作为字符串放入或警报中的语法或实际处理错误?
再次感谢
答案 0 :(得分:1)
鉴于列表的第三个元素是字符串&#34; RP&#34;,以下代码行:
<c:set var="ckstatus" value="${editTable[2]}" scope="request" />
alert("sched status Inside the foreach loop " + <c:out value="${ckstatus}"/>) ;
生成以下JavaScript代码:
alert("sched status Inside the foreach loop " + RP) ;
此JavaScript代码因此尝试显示JavaScript变量RP
的值。由于您尚未定义此类变量,因此其值为undefined
。
如果您确实需要从JavaScript代码访问数据,我的建议是
只需
var arrayOfObjects = ${theJsonString};
在JSP中,为了初始化包含JavaScript对象数组的JS变量,然后可以在其余的JS代码中使用它。
答案 1 :(得分:0)
我想我在2010年的一个问题中找到了答案。这就是它所说的:
最好的解决方案是让JSP / JSTL生成一个JavaScript对象变量,以后可以在JS代码中访问它。
var groupMap = {
<c:forEach items="${configuredGroupMap}" var="groupMap" varStatus="loop">
"${groupMap.key}": "${groupMap.value}"${!loop.last ? ',' : ''}
</c:forEach>
};
这将最终像客户端中的以下内容(右键单击页面和查看源代码以确定)
var groupMap = {
"key1": "value1",
"key2": "value2",
"key3": "value3"
};
最后重写checkSelection(),如下所示:
function checkSelection(group, tvalue) {
if (groupMap[group] == tvalue) {
alert("equal");
}
}
让我感到困惑的是,阅读此内容的是函数中为“group”传递的内容。是在for循环中完成的索引号,用于显示groupmap [0]或传递“key1”或“value1”值的内容。
我没有足够的声望点在线程中询问,而且除了它是6年前还是。任何人都知道“小组”的传递是什么意思
感谢您的帮助。