当前位置:首页 > 问答 > 正文

表单处理|数据删除 Struts2实现表单数据删除到数据库的方法与步骤

Struts2实战:表单数据删除操作全攻略

——2025年8月最新技术实践指南

最新动态:Struts2仍活跃于企业级应用

尽管新兴框架层出不穷,2025年企业调研显示,Struts2凭借其稳定性和成熟度,仍在金融、电信等传统行业保持约18%的市场占有率,最新安全补丁(2.5.30版本)进一步强化了数据操作的安全性,使其成为处理敏感数据删除操作的可靠选择。


需求场景理解

假设我们有一个用户管理系统,现在需要实现:

表单处理|数据删除 Struts2实现表单数据删除到数据库的方法与步骤

  1. 前端勾选多条用户数据
  2. 点击"批量删除"按钮
  3. 后端执行数据库删除操作
  4. 返回操作结果提示

技术实现步骤

步骤1:准备JSP表单页面

<!-- userList.jsp -->
<s:form action="deleteUsers" method="post">
  <table class="table">
    <s:iterator value="userList">
      <tr>
        <td><input type="checkbox" name="userIds" value="<s:property value='id'/>"/></td>
        <td><s:property value="username"/></td>
      </tr>
    </s:iterator>
  </table>
  <s:submit value="批量删除" cssClass="btn btn-danger"/>
</s:form>

关键点说明

  • 使用name="userIds"确保提交数组参数
  • Struts2标签自动处理值栈数据

步骤2:配置struts.xml

<action name="deleteUsers" class="com.example.UserAction" method="deleteUsers">
  <result name="success">/operationSuccess.jsp</result>
  <result name="error">/operationError.jsp</result>
</action>

步骤3:编写Action类

public class UserAction extends ActionSupport {
    private Integer[] userIds; // 必须与表单name一致
    private UserService userService; // 业务层注入
    public String deleteUsers() {
        try {
            if(userIds != null && userIds.length > 0) {
                userService.batchDelete(userIds);
                addActionMessage("成功删除 " + userIds.length + " 条记录");
                return SUCCESS;
            }
            addActionError("请至少选择一条记录");
            return ERROR;
        } catch (Exception e) {
            addActionError("删除失败:" + e.getMessage());
            return ERROR;
        }
    }
    // getter/setter省略...
}

步骤4:Service层实现(MyBatis示例)

@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private UserMapper userMapper;
    @Transactional
    public void batchDelete(Integer[] ids) {
        userMapper.deleteBatch(ids);
    }
}

MyBatis映射文件关键片段

<delete id="deleteBatch">
  DELETE FROM t_user WHERE id IN 
  <foreach collection="array" item="id" open="(" separator="," close=")">
    #{id}
  </foreach>
</delete>

安全增强方案(2025推荐)

  1. CSRF防护:在struts.xml中启用token拦截器

    表单处理|数据删除 Struts2实现表单数据删除到数据库的方法与步骤

    <interceptor-ref name="token"/>
    <interceptor-ref name="defaultStack"/>
  2. 权限校验:通过自定义拦截器验证操作权限

    public String deleteUsers() {
     if(!hasPermission("user:delete")) {
         return "noPermission";
     }
     // ...原有逻辑
    }
  3. 操作日志记录

    // 在Service层添加
    AuditLog.log(currentUser, "DELETE_USER", "删除ID:" + Arrays.toString(userIds));

常见问题排查

  1. 数据未删除:检查事务是否生效,MySQL的innodb表是否支持批量删除
  2. 参数接收为null:确保JSP中name属性与Action属性名称完全一致
  3. 性能优化:当删除量超过1000条时,建议分批次执行

延伸思考

2025年值得关注的改进方向:

表单处理|数据删除 Struts2实现表单数据删除到数据库的方法与步骤

  • 与Redis缓存联动,自动清除已删除数据的缓存
  • 结合Quartz实现延迟删除(软删除转物理删除)
  • 使用Struts2 REST插件构建API风格的删除接口

通过这套方案,我们不仅实现了基础删除功能,还构建了符合企业级应用要求的安全审计体系,实际开发中应根据具体业务需求调整实现细节,特别是涉及敏感数据删除时建议增加二次确认流程。

发表评论