1

我正在使用 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 在我拥有的其他 JSP 页面中运行良好。PD:我也实施了<body onLoad="Delete()">但没有结果。

4

1 回答 1

1

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

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

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

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

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

于 2013-06-12T20:07:29.620 回答