在按钮事件调用之前调用Javascript函数

时间:2013-06-12 20:02:40

标签: java javascript jsp scriptlet

我正在使用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()">而没有结果。

1 个答案:

答案 0 :(得分:1)

您的问题是将服务器端scriptlet与客户端JavaScript混淆。

每次加载页面时都会执行以下代码:

<%
    ArrayList<Resource.Watch> list = (ArrayList<Resource.Watch>) request.getSession()
        .getAttribute("list");
    list.clear();
%>

您的假设是它只会作为JavaScript函数的一部分执行,这是不正确的。您可以通过查看呈现的HTML来验证这一点,您将看到空的if块。

更好的方法是执行诸如执行对执行相同操作的servlet方法的Ajax调用之类的操作,而不是将此代码直接放入JSP中。