结合了JSP servlet和Javascript

Combining JSP servlets and Javascript

本文关键字:Javascript servlet JSP 结合了      更新时间:2023-09-26

我已经使用ASP.NET工作了几年,现在正在使用JSP、Struts和Java进行一个项目,所以我对此还很陌生。

我在JavaScript函数中有一个for循环,看起来像这样:

<% int count=0; %>
for(i = 0; i < arrayCount; i++){
   jsArray[i] = <%= myBeanArrayList.get(count) %>;
   alert("i = " + i + "count = " + count);
   <% count++; %>
}

即使使用<%,计数变量也不会递增count=count+1%>。我不明白为什么这段代码在循环中不能按我想要的方式执行。有人对我如何增加JSP Bean的计数有什么建议吗?

这是因为你在混合东西。

  1. 循环在javascript中,而变量count不存在(因为它是java)
  2. 您只在<% count++ %>中增加了一次计数

因此,如果您更改为在java中使用循环,则计数可以正常工作。例如:

<% for( int i = 0; i < ???; i++ ) { %>
 alert('<%= i %>');
<% } %>

但最好将javascript与JSP分离。这对曼丹来说可能很痛苦

我有点同意b1naryj,但您可以尝试在jsp中进行循环,只需用javascript编写数组赋值,比如:

<% 
for(i = 0; i < arrayCount; i++){
   %>jsArray[<%i%>] = <%= myBeanArrayList.get(i) %>;
<%}%>

这是丑陋的,尽管。。。

任何人都不应该在JSP中使用scriptlet代码。这是一个90年代末的成语,人们发现它丑陋、脆弱、难以维护。Model-2 MVC已经席卷了整个领域。

您应该集中精力在服务器端做一些事情。如果必须编写JSP,请使用JSTL。

我认为目前的最佳实践是使用HTML、CSS和JavaScript。使用HTTPGET/POST或AJAX调用从服务器端的服务获取数据。

您只是在客户端上循环,而不是在服务器上循环。服务器代码只执行一次。因此,对于JavaScript循环的每一次迭代,都使用相同的值myBeanArrayList.get(0)。查看源代码以查看生成的HTML代码,这可能有助于澄清问题。

编辑:相反,使用服务器端代码来构建JavaScript数组文字。我真的不知道JSP,我的Java也有点生疏,但这不管用吗?

var jsArray = <%= new JSONArray(myBeanArrayList) %>;