我正在使用JSP来开发一个存储包含bean的会话Arraylist的短项目,在另一个JSP页面中我有一个从onClick =“Delete()”按钮调用的delete()函数,也放在结束</body>
。
<script>
function Delete(){
var e = document.getElementById("DPwatches");
var strUser = e.options[e.selectedIndex].text;
var size=${fn:length(list)};
if(size>0){
<%
ArrayList<Resource.Watch> list = (ArrayList<Resource.Watch>) request.getSession()
.getAttribute("list");
list.clear();
%>
}
else{
alert("No elements");
}
}
问题是我的函数是在加载页面时调用的,它会在没有按钮事件的情况下从arraylist中删除我的对象。这有点令人沮丧,因为我的Arraylist在我拥有的其他JSP页面中运行良好。
PD:我还实施了<body onLoad="Delete()">
而没有结果。
答案 0 :(得分:1)
您的问题是将服务器端scriptlet与客户端JavaScript混淆。
每次加载页面时都会执行以下代码:
<%
ArrayList<Resource.Watch> list = (ArrayList<Resource.Watch>) request.getSession()
.getAttribute("list");
list.clear();
%>
您的假设是它只会作为JavaScript函数的一部分执行,这是不正确的。您可以通过查看呈现的HTML来验证这一点,您将看到空的if
块。
更好的方法是执行诸如执行对执行相同操作的servlet方法的Ajax调用之类的操作,而不是将此代码直接放入JSP中。