首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Struts2 批量刪除 Long 類型 ID 類型轉換失敗解決方案

     編輯:程式設計綜合問答

問題現象

  • 單條刪除:id=123 正常注入 Long id。
  • 批量刪除:id=123,456,789 導致類型轉換異常,因 Struts2 嘗試將字符串 "123,456,789" 直接轉為 Long。

根因

Struts2 默認類型轉換器不支持「逗號分隔字符串 → Long 數組/集合」的自動轉換。

解決方案:Action 增加 String 字段接收,手動分割


public class ResumeAction extends BaseModelAction {
    private String idList;  // 接收 "123,456,789"

    public String batchDelete() {
        if (idList != null && !idList.isEmpty()) {
            String[] ids = idList.split(",");
            for (String idStr : ids) {
                Long id = Long.valueOf(idStr.trim());
                resumeService.deleteById(id);
            }
        }
        return "toList";
    }
    // getter/setter for idList
}

JSP 表單調整


<s:form action="resume_batchDelete" method="post">
    <s:iterator value="resumeList" var="resume">
        <input type="checkbox" name="idList" value="<s:property value='id'/>" />
    </s:iterator>
    <input type="submit" value="批量刪除" />
</s:form>

所有勾選的 checkbox 同名 idList,提交時瀏覽器自動以逗號拼接。

進階:自定義類型轉換器(可選)


public class StringToLongArrayConverter extends StrutsTypeConverter {
    @Override
    public Object convertValue(Map context, Object value, Class toType) {
        if (toType == Long[].class || toType == long[].class) {
            String[] arr = ((String[]) value)[0].split(",");
            Long[] result = new Long[arr.length];
            for (int i = 0; i < arr.length; i++) result[i] = Long.valueOf(arr[i].trim());
            return result;
        }
        return super.convertValue(context, value, toType);
    }
}

在 xwork-conversion.properties 註冊:java.lang.Long[]=com.example.StringToLongArrayConverter。之後 Action 可直接用 Long[] ids 接收。

總結

最簡做法:Action 加 String idList 手動分割。追求優雅可註冊全局轉換器,實現 Long[] 直接注入。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved