package fr.mch.mdo.restaurant.web.struts; import java.math.BigDecimal; import java.text.NumberFormat; import java.text.ParsePosition; import java.util.Locale; import java.util.Map; import org.apache.struts2.util.StrutsTypeConverter; import com.opensymphony.xwork2.ActionContext; import fr.mch.mdo.restaurant.beans.IMdoBean; public class BigDecimalConverter extends StrutsTypeConverter { @SuppressWarnings({ "rawtypes", "unchecked" }) @Override public Object convertFromString(Map context, String[] values, Class toClass) { if (values.length != 1) { super.performFallbackConversion(context, values, toClass); } BigDecimal result = BigDecimal.ZERO; String stringValue = values[0]; Number number = this.doConvertToNumber(context, stringValue); if (number != null) { result = new BigDecimal(number.toString()); } return result; } @SuppressWarnings("rawtypes") @Override public String convertToString(Map context, Object o) { IMdoBean bean = (IMdoBean) o; // return bean.getId().toString(); return bean.toString(); } private Number doConvertToNumber(Map<String, Object> context, Object value) { Number result = BigDecimal.ZERO; if (value instanceof String) { String stringValue = (String) value; NumberFormat numFormat = NumberFormat.getInstance(getLocale(context)); ParsePosition parsePos = new ParsePosition(0); numFormat.setGroupingUsed(true); result = numFormat.parse(stringValue, parsePos); } return result; } private Locale getLocale(Map<String, Object> context) { if (context == null) { return Locale.getDefault(); } Locale locale = (Locale) context.get(ActionContext.LOCALE); if (locale == null) { locale = Locale.getDefault(); } return locale; } }