我有一个Servlet,它在从SQL获取数据后设置了request属性(它会返回一个List):
request.setAttribute("statsRegionList", statsRegionList);
我有一个下拉内存的jsp文件,下拉内容由另一个请求属性加载。 根据下拉选择,我需要检查'statsRegionList'并获得该特定Region的所需结果,该结果与下拉列表中选择的区域相匹配。
在阅读了一些论坛后,有人提到外部.js文件无法获取请求属性,因此需要在.jsp本身中设置。因此我已经在jsp中设置了:
<body>
<script type="text/javascript">
var regionList = <%=request.getAttribute("statsRegionList")%>;
</script>
然而,在IE上的控制台上显示错误: SCRIPT1014:无效字符 文件:仪表板,行:625,列:47 (无效字符是@,它作为对象List插入。)
感谢您的帮助。
答案 0 :(得分:1)
霍尔格你是对的。
我找到了解决方案,这就是我所做的。 由于.external js文件无法读取请求属性,因此我从jsp创建了一个全局变量,以便可以在.js文件中使用。 request属性返回一个ArrayList,因此在创建全局变量时它也应该是一个Array格式。
以下是.jsp
的代码段<script type="text/javascript">
var regions = [
<c:forEach items="${statsRegionList}" var="region" varStatus="status">
{region: '${region.name}', Devices : '${region.DeviceCount}'}
<c:if test="${!status.last}">
,
</c:if>
</c:forEach>
];
</script>
这可确保创建对象数组。此外,在外部.js文件中,现在可以访问全局变量var region,并且可以迭代它以查找与下拉列表选择匹配的所需详细信息。 从.jso文件剪切的代码如下:
dropdownSelect = $("#regionSelect option:selected").text();
var regionsArr = regions;
if ($.isArray(regionsArr)){
Object.keys(regionsArr).forEach(function (key) {
if(regionsArr[key]['region']== dropdownSelect){
var x=document.getElementById('RegionTable').rows;
x[0].cells[1].innerHTML=regionsArr[key]['DeviceCount'];
}
});
}