在javascript下使用表达式语言?

时间:2014-06-27 10:36:40

标签: java javascript jsp el

我在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()事件)吗?

2 个答案:

答案 0 :(得分:3)

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

  • 服务器检查.jsp是否已经编译,以及自上次编译以来它是否已更改。
  • Server通过Jasper编译器运行jsp,它将jsp解释为Java代码,任何非Java(CSS,HTML,JavaScript等)放在String中。
  • 编译并执行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

答案 1 :(得分:0)

试试这个:

<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;
}