HTTP 請求參數皆為字串,Struts2 需將其轉換為 Java 強類型 (int, Date, 自訂類別等)。框架提供內建轉換器並支援自訂擴充。
涵蓋基本類型與包裝類型:boolean/Boolean, char/Character, int/Integer, long/Long, float/Float, double/Double, Date。自動處理字串→目標類型,失敗則拋出異常。
public class PointConverter extends StrutsTypeConverter {
@Override
public Object convertFromString(Map context, String[] values, Class toType) {
String[] xy = values[0].split(",");
Point p = new Point();
p.setX(Integer.parseInt(xy[0]));
p.setY(Integer.parseInt(xy[1]));
return p;
}
@Override
public String convertToString(Map context, Object o) {
Point p = (Point) o;
return "[" + p.getX() + "," + p.getY() + "]";
}
}
ActionName-conversion.properties 放在 Action 同包,內容 point=com.example.PointConverter (屬性名=轉換器類)。xwork-conversion.properties 放在 src 根目錄,內容 com.example.Point=com.example.PointConverter (目標類型=轉換器類)。Struts2 的 conversionError 攔截器會將轉換失敗封裝為 FieldError 放入 ActionContext。
Mess.properties (src 根目錄),覆蓋 xwork.default.invalid.fieldvalue:xwork.default.invalid.fieldvalue="{0}" 參數轉換失敗。struts.xml 設定:<constant name="struts.custom.i18n.resources" value="Mess"/>建立 ActionName.properties,鍵值:invalid.fieldvalue.屬性名=提示訊息。