java - 在javascript下使用表达式语言?

标签 java javascript jsp el

我在 JSP 文件中有以下复选框

<input type="checkbox" name="vehicle" value="Bike"
    onclick="javascript:selectCustomers(${sessionScope.custId});">

出现以下错误:

org.apache.jasper.JasperException: customer.jsp(1419,33) According to TLD or attribute directive in tag file,
        attribute onclick does not accept any expressions

我们可以不在 JavaScript 中使用表达式语言(在我的例子中是在 onClick() 事件下)吗?

最佳答案

当调用 JSP 页面时,会按以下顺序发生以下情况:

  • 服务器检查 .jsp 是否已编译以及自上次编译以来是否已更改。
  • 服务器通过 Jasper 编译器运行 jsp,Jasper 编译器将 jsp 解释为 Java 代码,任何非 Java 的内容(CSS、HTML、JavaScript 等)都放在字符串中。
  • Java 代码已编译并执行。
  • 结果放置在响应中并发送给用户。

因此,您的语句: ${sessionScope.custId} 在 HTML 发送给用户之前执行,并且 selectCustomers() 函数的输入已经在调用之前设置为。


有关更多信息,请查看我的另一篇文章 JSP inside ListItems onclick

如何验证?

在浏览器中右键单击并查看查看源代码。


尝试下面的示例代码可能会对您有所帮助。

${...} 括在单引号内。

<c:set var="custId" value="1234" scope="session" />

Before :
<c:out value="${sessionScope.custId}"></c:out>

<input type="checkbox" name="vehicle" value="Bike"
    onclick="javascript:selectCustomers('${sessionScope.custId}');">

<c:set var="custId" value="4321" scope="session" />

After:
<c:out value="${sessionScope.custId}"></c:out>

查看源代码:(在浏览器中单击鼠标右键即可查看)

Before : 1234

<input type="checkbox" name="vehicle" value="Bike"
    onclick="javascript:selectCustomers('1234');">  

After: 4321

关于java - 在javascript下使用表达式语言?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24449784/

相关文章:

javascript - 为什么我无法读取在 POST 中收到的参数?

java - 确保 "singleton-like"非final字段的唯一性,在哪里加锁?

javascript - Bootstrap 4.1.1 页脚与右边框居中对齐

java - 如何更改每一行的背景颜色?

javascript - React 0.13.3 给出的 Super 表达式必须为 null 或函数,而不是对象

javascript - 如何保持高度和宽度成比例为16 :9 aspect ratio in any screen

java - 我可以在单个 Spring Handler 方法中使用多个 @ModelAttribute 注释吗

java -/urlpage 和 urlpage 有什么区别?

java - Java 中不可修改的 NavigableSet/NavigableMap?

Java 对象数组项到字符串数组