【问题标题】:Using Expression language under javascript?在javascript下使用表达式语言?
【发布时间】:2014-06-27 10:36:40
【问题描述】:

我在 JSP 文件中有下面的 CheckBox

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

得到以下错误:

org.apache.jasper.JasperException: customer.jsp(1419,33) 根据标签文件中的TLD或属性指令,
onclick 属性不接受任何表达式

我们不能在 JavaScript 中使用表达式语言吗(在我的情况下是在 onClick() 事件下)?

【问题讨论】:

  • 顺便说一句:您可以删除 javascript:,因为在这种情况下它只是无意义的标签 - onclick="anything:selectCustomers();" 也可以。

标签: java javascript jsp el


【解决方案1】:

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

  • 服务器检查 .jsp 是否已经编译,以及自上次编译后它是否发生了变化。
  • 服务器通过 Jasper 编译器运行 jsp,该编译器将 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

【讨论】:

    【解决方案2】:

    试试这个:

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

    【讨论】:

      猜你喜欢
      • 2011-09-30
      • 2012-07-05
      • 1970-01-01
      • 2012-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-14
      • 2019-07-26
      相关资源
      最近更新 更多