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

Struts2 類型轉換完整指南:全局/局部配置、錯誤處理、自定義轉換器

     編輯:Java 綜合教學

類型轉換雙向機制

  • convertFromString:HTTP 參數(String) → Action 屬性(目標類型)
  • convertToString:Action 屬性 → JSP 顯示(String)

兩種配置範圍

範圍配置文件位置命名規則生效範圍
全局類路徑根目錄xwork-conversion.properties全應用同類型屬性
局部Action/Model 同包ActionClassName-conversion.properties僅該類指定屬性

自定義轉換器開發步驟

  1. 繼承 StrutsTypeConverter
  2. 實現 convertFromString(Map, String[], Class)
  3. 實現 convertToString(Map, Object)
  4. 配置屬性/類型映射

實戰案例:Point 類型全局轉換

模型類

public class Point {
    private int left, right;
    // getter/setter 省略
}

轉換器

public class PointConverter extends StrutsTypeConverter {
    @Override
    public Object convertFromString(Map context, String[] values, Class toType) {
        String[] parts = values[0].split(",");
        Point p = new Point();
        p.setLeft(Integer.parseInt(parts[0]));
        p.setRight(Integer.parseInt(parts[1]));
        return p;
    }
    @Override
    public String convertToString(Map context, Object o) {
        Point p = (Point) o;
        return p.getLeft() + "-" + p.getRight();
    }
}

全局配置 xwork-conversion.properties

cn.com.leadfar.model.Point=cn.com.leadfar.struts2.actions.PointConverter

局部轉換案例:同類型不同格式

UserAction.beginDate 用 yyyy-MM-dd,User.endDate 用 yyyy/MM/dd

兩個轉換器

public class BeginDateConverter extends StrutsTypeConverter {
    private SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");
    // 實現 parse/format 邏輯
}
public class EndDateConverter extends StrutsTypeConverter {
    private SimpleDateFormat fmt = new SimpleDateFormat("yyyy/MM/dd");
    // 實現 parse/format 邏輯
}

局部配置文件

# UserAction-conversion.properties
beginDate=cn.com.leadfar.struts2.actions.BeginDateConverter

# User-conversion.properties
endDate=cn.com.leadfar.struts2.actions.EndDateConverter

轉換錯誤處理與顯示

覆蓋默認錯誤消息

# ActionClassName.properties
invalid.fieldvalue.age=年齡必須為數字

簡單主題下顯示錯誤

  • EL:${fieldErrors.age[0]}
  • 標簽:<s:fielderror fieldName="age"/>
  • 去除 ul/li/span:覆蓋 template/simple/fielderror.ftl

進階場景

  • 集合類型轉換:批量錄入,配合 TypeConversionInterceptor
  • 復雜屬性:嵌套對象屬性鏈式轉換
  • 初始化參數:可在 web.xml 配置
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved