【问题标题】:Scriptlet variable doesn't get evaluated inside an attribute of a custom JSP tagScriptlet 变量不会在自定义 JSP 标记的属性内进行评估
【发布时间】:2011-08-09 19:46:37
【问题描述】:

我试图在单击链接时调用 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;"

因此,&lt;%=commentUUID%&gt; 未在 actionOnClick 属性中进行评估,但已在 id 属性中成功评估。

这是如何引起的,我该如何解决?

【问题讨论】:

  • javascript: 不属于onclick 属性。
  • 点击链接时会发生什么? Firebug 或 WebKit 开发人员工具的控制台中是否显示错误消息?还是什么都没发生?
  • 这是一条评论。不是你的问题的答案。如果没有看到生成的 HTML 代码,很难说是什么损坏了 - 但 onclick="..." 中的 javascript: 始终是不必要的。
  • @matt:只是普通的原始 javascript。 onclick="editComment(...)"。您唯一一次使用 javascript: pseudourl 是在 &lt;a href="javascript:..."&gt;...&lt;/a&gt;
  • 它在页面左下角显示错误(我使用的是 IE8)然后当我右键单击并查看源代码时,相关行是:onclick="editComment(' ');返回假;" '' 通常被 jsp 中定义的字符串值替换,但不是

标签: java javascript jsp syntax jsp-tags


【解决方案1】:

我不确定&lt;mysecurity:secure_link&gt; 是自定义还是现有的第 3 方 JSP 标记库。现代 JSP 标记通常不评估旧的 scriptlet 表达式。你应该改用EL (Expression Language)

首先确保将commentUUID变量存储为页面或请求范围的属性,以便EL可以使用它,如下面的预处理示例servlet

request.setAttribute("commentUUID", commentUUID);

在 JSP 中使用另一个 scriptlet

<% request.setAttribute("commentUUID", commentUUID); %>

在 JSP 中使用 JSTL&lt;c:set&gt;

<c:set var="commentUUID"><%=commentUUID%></c:set>

那么你可以在EL中按如下方式访问它:

<mysecurity:secure_link actionOnClick="editComment('${commentUUID}');return false;" />

【讨论】:

  • 使整个应用程序保持最新状态需要很长时间
  • 这不起作用,我需要设置某种配置才能让 EL 被理解吗?
  • 这是自定义标签还是第 3 方标签?如果自定义,请确保在 taglib 属性声明中设置了 &lt;rtexprvalue&gt;true&lt;/rtexprvalue&gt;。如果是第 3 方,则通过从生成的 HTML 元素 ID 中提取它来解决它。例如。 editcomment(this.id.split('_')[1]).
【解决方案2】:

根据@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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-15
    • 2021-05-02
    • 1970-01-01
    • 2017-05-26
    • 1970-01-01
    相关资源
    最近更新 更多