You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用JSP标签向JavaScript传值时JSP表达式未解析问题求解

问题根因

该问题的核心原因是Struts 自定义标签(比如<html:link>)的属性值内部嵌套JSP脚本表达式时,不会被JSP容器正常解析,所以<%=MyForm.USERNAME%>没有被替换成实际常量值,而是直接作为字符串输出到了前端,导致JS函数接收到错误的参数。

可行解决方案

方案1:改用原生HTML标签替代Struts链接标签

原生HTML标签的属性内的JSP脚本表达式会被正常解析,如果你不需要用到<html:link>的特殊能力(比如自动拼接应用上下文路径、表单参数自动绑定),这是改造成本最低的方案:

<!-- 替换<html:link>为原生a标签 -->
<a href="#" class="frameaction" onclick="verifyUsername('<%=MyForm.USERNAME%>'); return false;">
    <img src="<%=verifyButton%>" />
</a>

方案2:提前将常量存入JSP上下文后用EL表达式传参

如果必须使用<html:link>标签,可以提前把常量值存入JSP的域对象,再用EL表达式传入标签属性,Struts标签可以正常解析EL表达式:

<%
// 提前将常量值存入page域
pageContext.setAttribute("USERNAME_CONST", MyForm.USERNAME);
%>
<html:link href="#" styleClass="frameaction" onclick="verifyUsername('${USERNAME_CONST}'); return false;">
    <html:img src="<%=verifyButton%>"/>
</html:link>

方案3:直接读取页面隐藏域的值,取消参数传递

你已经在页面定义了对应常量的隐藏域,可以直接在JS中读取该隐藏域的值,完全规避参数传递的解析问题:

  1. 修改链接的onclick属性,取消参数传递:
<html:link href="#" styleClass="frameaction" onclick="verifyUsername(); return false;">
    <html:img src="<%=verifyButton%>"/>
</html:link>
  1. 调整JS函数逻辑,主动读取隐藏域值:
function verifyUsername() {
  // 读取隐藏域的实际值
  const username = document.querySelector('input[name="<%=MyForm.USERNAME%>"]').value;
  // 原有校验逻辑保持不变
}

内容的提问来源于stack exchange,提问作者Hải Trung Phạm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 09:45:02