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

Struts2 驗證攔截器報錯:cannot find method [validateErWeiMa] 解決指南

     編輯:程式設計疑難解答

錯誤日誌分析

DEBUG (PrefixMethodInvocationUtil:72) - cannot find method [validateErWeiMa] in action [com.ticket.action.WapValidationAction@4c8dc2e4]
DEBUG (PrefixMethodInvocationUtil:72) - cannot find method [validateDoErWeiMa] in action [com.ticket.action.WapValidationAction@4c8dc2e4]

根本原因

Struts2 AnnotationValidationInterceptor 按約定尋找驗證方法:

  • Action 方法為 erWeiMa() → 驗證方法應為 validateErWeiMa()
  • Action 方法為 doErWeiMa() → 驗證方法應為 validateDoErWeiMa()

日誌顯示兩者均未找到,說明 WapValidationAction 類中缺少對應的驗證方法。

解決方案

方案一:補全驗證方法(推薦)

public class WapValidationAction extends ActionSupport {
    public String erWeiMa() {
        // 業務邏輯
        return SUCCESS;
    }

    // 必須存在:對應 erWeiMa() 的驗證
    public void validateErWeiMa() {
        if (StringUtils.isBlank(getImg64())) {
            addFieldError("img64", "圖片數據不能為空");
        }
    }
}

方案二:使用 @SkipValidation 註解跳過

@SkipValidation
public String erWeiMa() { ... }

方案三:改用 XML 驗證配置

在 WapValidationAction-erWeiMa-validation.xml 中定義驗證規則,不依賴方法命名約定。

最佳實踐建議

  • 統一採用 validateXxx() 命名,與 Action 方法 xxx() 對應。
  • 驗證邏輯放在 validateXxx() 中,業務邏輯放在 xxx() 中,職責分離。
  • 日誌輸出建議配置為 JSON 格式,便於 ELK 分析。

總結

cannot find method [validateErWeiMa] 純屬代碼缺失導致。補全對應驗證方法或顯式跳過驗證即可解決。養成「Action 方法與驗證方法成對出現」的習慣,避免此類低級錯誤。

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