【问题标题】:How to access a Java object in JavaScript from JSP [duplicate]如何从 JSP 访问 JavaScript 中的 Java 对象 [重复]
【发布时间】:2011-09-28 11:12:42
【问题描述】:

我在 JSP 中有一个下拉框,列出了一个 Java 对象(通过 MVC 控制器的 addAttribute 访问该对象)。现在,在从下拉框中选择一个选项时,我想在 div 中显示所选员工的其他详细信息(例如 - ${employee.employeeCV}、${employee.employeeName})。我有一个 JavaScript 函数(displayCV())。但我不知道该怎么做。

JSP -

<c:forEach items="${employees}" var="employee">
  <option value="${employee.id}" onclick="displayCV();">
    ${employee.employeeName}
  </option>
</c:forEach>

<b>CV:</b>

JavaScript

function displayCV() {
    var valueSelected = $('#employeeList').val();
    var div = $('#candidateDiv');
}

我该怎么做?

【问题讨论】:

  • employeeCV 渲染在哪里?
  • 我将它添加到 displayCV() - $('#employeeCv').html('

    ${employee.employeeCV}

    ');它显示“${employee.employeeCV}”

标签: java javascript jsp


【解决方案1】:

LeleDumbo 已经说过 here 的元数据:

首先,您必须了解 JSP 是一种服务器端视图技术,而 JavaScript 通常运行在客户端(浏览器)上。

现在,您如何解决手头的问题。因此,您可以从您的 JavaScript 代码发出 Ajax 请求,该请求将以 JSON/XML 格式获取数据。然后,您可以使用 JavaScript 在浏览器中显示该数据。

延伸阅读: jQuery Ajax API and code samnple snippets

【讨论】:

  • 倒数第二个链接(实际上)已损坏 - 它重定向到 https://jquery.com/
【解决方案2】:

在 select 的 onchange 事件而不是选项的 onclick 事件上调用该函数。并使用:

document.getElementById('GrdDamagedstock_tplRowEdit_ctl00_cmbFromBin').options[ele.options.selectedIndex].innerHTML;

获取选定的值。

【讨论】:

    【解决方案3】:

    您不能直接从 JavaScript 访问 Java 类。您必须在 JavaScript(客户端)和 Java(服务器)之间使用某种 Web 服务通信。您可以使用 onchange 事件,该事件将向服务器发送请求以返回 XML/JSON,您可以对其进行解析以获取数据(我看到您正在使用 jQuery,并且它已经具有 parseJSON 方法)并更新相应的节点在 DOM 中。

    不过,另一种更简单的方法,即对多用户不友好(因为它无法检测更新)是将 Java 对象“转换”为 JavaScript 并使用该对象更新数据(仍然使用 onchange)。比如:

    // This is JavaScript code written in the JSP
    var employees = {
      <c:forEach items="${employees}" var="employee">
      "${employee.id}": {
        name:"${employee.employeeName}",
        cv:"${employee.employeeCV}",
      },
      </c:forEach>
    }
    

    现在当 JSP 解析这个时,它会生成,例如:

    var employees = {
      "1": {
        name:"foo",
        cv:"cv1",
      },
      "2": {
        name:"bar",
        cv:"cv2",
      },
    }
    

    【讨论】:

    • 嗨,我明白你在说什么,出于某种原因,我现在不能使用 json/Xml。其次,我想只显示从下拉框中选择的一名员工的员工简历。谢谢
    • 有人可以帮我解决这个问题吗??
    • 那么你不明白我的意思(第二个解决方案)。 When the selection change, you could query employees map to get the data of the just chosen dropdown.假设下拉菜单名为employeedd,您可以使用employees[employedd.value].name an employees[employeeedd.value].cv 来获取它们。
    • @LeleDumbo 你好,我想跟着你 sn-p。你知道为什么我会看到这个错误吗? mural.uv.es/jumaru/images/javascript.png
    • 因为弹出窗口中写的内容(我猜消息很清楚)。请注意,尾随逗号在 ECMAScript 5(大多数浏览器实现)中有效,我不知道 JSP 解析器如何看待这一点,但只需按照它所说的(即删除尾随逗号)。
    猜你喜欢
    • 2012-10-03
    • 2017-08-03
    • 1970-01-01
    • 1970-01-01
    • 2013-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多