我在 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/