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

从Struts迁移至Spring:html:button等价组件及property属性咨询

从Struts <html:button> 迁移到Spring MVC的解决方案

嘿,我刚好做过类似的迁移,来帮你理清这个问题!

首先,先拆解Struts里<html:button>的property属性到底起什么作用:你代码里的<html:button property="doCall" ...>,本质上是当这个按钮触发表单提交时(通常是通过你的validate()函数里的逻辑),Struts会自动帮你往请求里添加一个参数——参数名是doCall,参数值是按钮的value(也就是Generate New)。这个属性是Struts封装的语法糖,原生HTML里没有对应的直接属性。

然后说Spring这边的情况:Spring MVC确实没有专门对应Struts <html:button>的组件,但这完全不是问题,因为Spring非常鼓励使用原生HTML表单元素,你完全可以用<input type="button">或者更灵活的<button>标签来替代。

接下来要解决的核心问题:怎么把原来Struts自动处理的property参数逻辑迁移过来?有两种简单的方式:

  • 方式一:用隐藏域模拟参数
    在你的Spring表单(不管是原生<form>还是Spring的<form:form>标签)里添加一个隐藏域,提前定义好要发送的参数:

    <form:form modelAttribute="yourModel" action="/your-action">
      <!-- 其他表单元素 -->
      <input type="hidden" name="doCall" value="Generate New">
      <input type="button" onClick="validate();" value="Generate New">
    </form:form>
    

    这样当validate()函数触发表单提交时,doCall=Generate New这个参数会自动被发送到后端,和Struts的效果完全一致。

  • 方式二:在JS里动态添加参数
    如果你的参数值需要动态生成,或者不想提前放隐藏域,可以在validate()函数里手动添加参数:

    function validate() {
      // 你的验证逻辑(比如检查表单输入合法性)
      if (validationPassed) {
        const form = document.getElementById("your-form-id");
        // 创建临时隐藏域并添加到表单
        const paramInput = document.createElement('input');
        paramInput.type = 'hidden';
        paramInput.name = 'doCall';
        paramInput.value = 'Generate New'; // 这里也可以换成动态值
        form.appendChild(paramInput);
        // 提交表单
        form.submit();
      }
    }
    

    对应的按钮代码就是原生的:

    <input type="button" onClick="javascript:void(validate());" value="Generate New">
    

最后补充一下后端接收:Spring MVC里接收这个参数和普通请求参数一样,直接用@RequestParam注解就行:

@PostMapping("/your-action")
public String handleRequest(@RequestParam("doCall") String doCall, /*其他参数*/) {
  // 处理业务逻辑
  return "your-view";
}

总的来说,原生按钮完全可以替代Struts的<html:button>,只需要手动补上Struts自动帮你做的参数添加逻辑就行,非常简单!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:10:46