【问题标题】:Combining JSP servlets and Javascript结合 JSP servlet 和 Javascript
【发布时间】:2012-02-10 00:21:15
【问题描述】:

我已经使用 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 变量也不会增加。我不明白为什么那段代码在循环中没有按我想要的那样做。有人对我如何增加 JSP Bean 的计数有任何建议吗?

【问题讨论】:

  • 像这样混合 JS 和后面的代码不是好的做法(在任何语言中)。

标签: java javascript jsp


【解决方案1】:

那是因为你在混合东西。

  1. 您的循环位于 javascript 中,而变量 count 不存在(因为它是 java)
  2. 你增加了一次计数,就在&lt;% count++ %&gt;

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

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

但最好将您的 javascript 与 JSP 分开。这可能是一种痛苦。

【讨论】:

  • JSP 中的 scriptlet 代码是多么丑陋、可怕的事情。任何人都不应该再次使用它。
  • 是的。但这只是 Jared 理解为什么他的代码不起作用的示例。
  • 感谢您的评论,我添加了警告:)
  • @duffymo 所以发布一个答案。我只关注他的问题,并没有考虑推荐更好的东西。
  • 丑陋的是......但这是解决方案:p
【解决方案2】:

我有点同意 b1naryj,但你可以尝试在 jsp 中进行循环,然后在 javascript 中编写数组赋值,类似于:

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

虽然很丑,但是...

【讨论】:

    【解决方案3】:

    没有人应该在 JSP 中使用 scriptlet 代码。这是一个 90 年代后期的成语,已被发现丑陋、易碎且难以维护。 Model-2 MVC 风靡全球。

    您应该专注于在服务器端做事。如果您必须编写 JSP,请使用 JSTL。

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

    【讨论】:

    • 我同意不幸的是,我不是编写原始程序的人,而且目前是图腾柱上的低人一等,因此我需要一些时间才能对如何实现代码产生影响。 .. 另外,我相信我们对可以使用的技术有限制。
    【解决方案4】:

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

    编辑:改为使用服务器端代码来构建 JavaScript 数组字面量。我不是很懂 JSP,而且我的 Java 有点生疏,但是这行不通吗?

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

    【讨论】:

    • ahhhhhh... 我正在处理的弹出窗口不允许右键单击或有菜单栏。一旦我激活了菜单栏并查看了源代码......现在我看到会发生什么......
    • @Jard - 是的,“查看源代码”在开始使用这些东西时是一个有用的工具。您只需要习惯所有服务器端代码在页面被发送到浏览器之前执行的想法。
    • 是的,它很难习惯 .. 我已经习惯了 asp.net 网络表单和使用代码背后 .. 这种混合代码、javascript、scriplets 和 html 在一个页面上令人难以置信。 ..
    • 对于那些阅读这篇文章的人来说,这可能是更好的途径。如果我能够实现这个,我会在稍后更新...
    猜你喜欢
    • 1970-01-01
    • 2016-06-10
    • 1970-01-01
    • 2011-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-11
    • 1970-01-01
    相关资源
    最近更新 更多