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

如何在Struts框架下通过Velocity模板触发Java Action类执行

Struts2 + Velocity 下拉框变更触发Action完整实现示例

1. 修改Velocity模板(.vm文件)

调整你的表单代码,补充option的value属性、完善onchange事件逻辑,下拉框变更时自动提交表单到Action:

<form id="someFormId" name="someFormName" action="someFormAction" method="post">
   <select id="someSelectId" name="someSelectName" onChange="this.form.submit()">
      <option value="option1_value">option1</option>
      <option value="option2_value">option2</option>
   </select>
</form>
<!-- 如果需要显示Action返回的处理结果,可以直接引用Action属性 -->
#if($processResult)
<p>处理结果:$processResult</p>
#end

如果你不需要页面刷新,也可以用异步提交方式,替换onChange的逻辑即可:

<select id="someSelectId" name="someSelectName" onChange="submitSelectValue()">
<!-- 下拉框option内容同上 -->
</select>
<script>
function submitSelectValue() {
  const selectValue = document.getElementById('someSelectId').value;
  const xhr = new XMLHttpRequest();
  xhr.open('POST', 'someFormAction');
  xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
  xhr.onload = function() {
    if (xhr.status === 200) {
      // 处理返回的结果
      console.log('处理完成', xhr.responseText);
    }
  };
  xhr.send('someSelectName=' + encodeURIComponent(selectValue));
}
</script>

2. 编写Struts Action类

定义和select的name属性同名的成员变量,生成getter/setter方法,Struts会自动将下拉框选中值注入到该变量中:

package com.yourpackage;

import com.opensymphony.xwork2.ActionSupport;

public class SelectProcessAction extends ActionSupport {
    // 变量名必须和select的name属性完全一致
    private String someSelectName;
    // 处理后返回给前端的结果变量
    private String processResult;

    @Override
    public String execute() {
        // 这里写你的业务处理逻辑,someSelectName就是下拉框选中的值
        if ("option1_value".equals(someSelectName)) {
            processResult = "选中了第一项,处理完成";
        } else if ("option2_value".equals(someSelectName)) {
            processResult = "选中了第二项,处理完成";
        }
        return SUCCESS;
    }

    // 必须生成getter和setter
    public String getSomeSelectName() {
        return someSelectName;
    }

    public void setSomeSelectName(String someSelectName) {
        this.someSelectName = someSelectName;
    }

    public String getProcessResult() {
        return processResult;
    }

    public void setProcessResult(String processResult) {
        this.processResult = processResult;
    }
}

3. 配置struts.xml

配置Action映射,指定返回视图类型为velocity,关联你对应的vm模板:

<struts>
    <package name="default" extends="struts-default">
        <!-- action的name和表单里的action属性对应,class填你自己的Action类全路径 -->
        <action name="someFormAction" class="com.yourpackage.SelectProcessAction">
            <!-- 结果类型指定为velocity,标签内容填你的vm文件路径 -->
            <result name="success" type="velocity">/path/to/your/template.vm</result>
            <!-- 如果是异步提交不需要返回页面,可以返回纯文本结果 -->
            <!-- <result name="success" type="plainText">${processResult}</result> -->
        </action>
    </package>
</struts>

依赖说明(Maven项目)

确保你的pom.xml中已经引入Struts2的Velocity插件依赖:

<dependency>
    <groupId>org.apache.struts</groupId>
    <artifactId>struts2-velocity-plugin</artifactId>
    <version>你的Struts2对应版本号</version>
</dependency>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 05:36:02