Scriptlet变量不会在自定义JSP标记的属性内进行评估

时间:2011-08-09 19:46:37

标签: java javascript jsp syntax jsp-tags

我正在尝试在单击链接时调用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属性中进行了评估。

这是如何造成的?我该如何解决?

2 个答案:

答案 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;" />