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

Struts2表单经JavaScript提交时隐藏参数duplicateurl为空的问题求助

问题排查与解决方案

我来帮你一步步拆解并解决这两个问题——alert不弹出和duplicateurl为空的情况,这俩其实是关联在一起的:

1. 为什么alert没弹出?

首先你的提交按钮是type="Submit",它会触发表单的原生提交事件,这大概率导致JS函数还没执行完,页面就已经开始跳转了,所以alert根本没机会弹出来。另外还有两个关键坑:

  • document.URLUnencoded不是标准浏览器属性!标准获取当前页面URL应该用document.URL或者window.location.href,这个非标准属性可能直接导致JS报错,中断后续所有代码(包括alert和赋值操作)。
  • 如果你的JS代码放在表单之前,浏览器解析到按钮的onclick="submitLogon()"时,函数还没定义,会直接报错,导致函数完全不执行。

2. 一站式解决两个问题

按照下面的步骤修改,就能搞定:

步骤1:阻止按钮的默认提交行为

把按钮的type改成button(避免原生提交抢先执行),确保JS函数能完整跑完再手动提交表单:

<s:form action="SubmitLogon" onfocus="username" id="logonForm"> 
  <s:hidden name="lastsession" value="N"/> 
  <s:hidden name="duplicateurl" /> 
  <table> 
    <tr> 
      <td colspan="2" align="right"> 
        <button type="button" value="Login" style="WIDTH: 98px; HEIGHT: 39px; background:Transparent; border:None" onclick="submitLogon()"> 
          <img src='/images/btn_login.jpg' /> 
        </button> 
      </td> 
    </tr> 
  </table> 
</s:form>

步骤2:修正JS代码的错误点

替换非标准的URL属性,同时用更稳妥的方式获取表单元素:

<script type="text/javascript">
function submitLogon(){
  // 用标准属性获取当前URL
  var currentUrl = window.location.href;
  // 通过ID获取表单,避免name属性不匹配的问题
  var form = document.getElementById("logonForm");
  // 给隐藏域赋值
  form.duplicateurl.value = currentUrl;
  // 现在alert应该能正常弹出了
  alert("dupURL------------"+currentUrl);
  // 手动提交表单
  form.submit();
}
</script>

步骤3:确保JS代码的位置正确

把你的<script>标签放在表单之后,或者用DOMContentLoaded事件包裹,确保DOM加载完成后再定义函数:

<script type="text/javascript">
document.addEventListener('DOMContentLoaded', function() {
  window.submitLogon = function(){
    var currentUrl = window.location.href;
    var form = document.getElementById("logonForm");
    form.duplicateurl.value = currentUrl;
    alert("dupURL------------"+currentUrl);
    form.submit();
  };
});
</script>

额外验证小技巧

  • 按下F12打开浏览器开发者工具,切换到「Console」标签,点击提交按钮看看有没有JS报错,这能快速定位问题根源。
  • 查看页面生成的HTML源码,确认<s:hidden name="duplicateurl" />的name属性确实是duplicateurl,和Action类里的属性名完全一致。

按上面的方法修改后,alert应该能正常弹出,duplicateurl的值也能正确传递到你的Struts Action里了。

内容的提问来源于stack exchange,提问作者learning knowledge

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:50:32