我正在尝试在单击链接时调用JavaScript函数。这个JavaScript函数定义在JSP标记的属性中,我试图将 scriptlet 变量传递给该函数。但是,它没有得到评估。代码的相关部分是:
<span>
<mysecurity:secure_link id='<%="editButton_"+commentUUID%>' entitlement=""
actionOnClick="editComment('<%= commentUUID %>');return false;"
isSurroundedByBrackets="true" enableTitle="" disableLink="<%=disableLink%>">
<span style="color:#0033BB; font:8pt arial;">
<bean:message key="button.edit" />
</span>
</mysecurity:secure_link>
</span>
IE8提到了左下角的JavaScript错误。当我右键单击并查看源代码时,生成的HTML为:
onclick="editComment('<%= commentUUID %>');return false;"
因此,<%=commentUUID%>
未在actionOnClick
属性中进行评估,但已成功在id
属性中进行了评估。
这是如何造成的?我该如何解决?
答案 0 :(得分:1)
最终对我有用的是@BalusC的建议是使用editcomment(this.id.split('_')[1])。正确的工作代码如下:
<span>
<mysecurity:secure_link id='<%="editButton_"+commentUUID%>' entitlement=""
actionOnClick="javascript:editComment(this.id.split('_')[1]);return false;"
isSurroundedByBrackets="true" enableTitle="" disableLink="<%=disableLink%>">
<span style="color:#0033BB; font:8pt arial;">
<bean:message key="button.edit" />
</span>
</mysecurity:secure_link>
</span>
答案 1 :(得分:0)
我不确定<mysecurity:secure_link>
是自定义的还是现有的第三方JSP标记库。现代JSP标记通常不会评估遗留的 scriptlet 表达式。您应该使用EL (Expression Language)代替。
首先确保将commentUUID
变量存储为页面或请求范围的属性,以便EL可以使用它,就像预处理servlet中的以下示例一样:
request.setAttribute("commentUUID", commentUUID);
或在JSP中使用另一个 scriptlet :
<% request.setAttribute("commentUUID", commentUUID); %>
在JSP中使用JSTL的<c:set>
或:
<c:set var="commentUUID"><%=commentUUID%></c:set>
然后您可以在EL中按如下方式访问它:
<mysecurity:secure_link actionOnClick="editComment('${commentUUID}');return false;" />