struts 2英語版の日付の提出ミスについて
【転載】:英語環境でStruts 2日付フォーマット変換の問題
住所:http://blog.csdn.net/liuzhenfeng/article/details/6605045
Struts 2を使って開発する過程で、私達はよくStruts 2の持参するタイプのコンバータを使って、これらのタイプのコンバータも本当に簡略化して私達の開発を行って、しかし、時にはそれらもいくつか問題が現れます.例えば、
<input id=「startTime」name=「startTime」 readonly onfocus=「WdatePicker()」
value=「{startTime}」(日付フォーマットは「yyy-M-dd」に設定)
アクションの属性は、prvate Date startTimeと定義されている.
このように中国語環境(locale)のシステムでは問題ないですが、英語環境のシステムでは異常があります.理由は英語環境に「yyyy-M-dd」形式の日付がないため、変換過程に異常があるからです.
異常の原因がわかったら、解決方法があります.日付変換器を書いてください.
また、struts.xmlに直接定数を定義して、localeを「zhuCN」に設定しても解決できるという人がいます.
補足説明:
プロジェクトでは、他の同僚と会って、「yyyy-M-dd HH:mm:ss」でフォーマットしています.提出する時はいつも異常です.
後に転化をする時、stringのtrimで前後のスペースを削る必要があります.
住所:http://blog.csdn.net/liuzhenfeng/article/details/6605045
Struts 2を使って開発する過程で、私達はよくStruts 2の持参するタイプのコンバータを使って、これらのタイプのコンバータも本当に簡略化して私達の開発を行って、しかし、時にはそれらもいくつか問題が現れます.例えば、
<input id=「startTime」name=「startTime」 readonly onfocus=「WdatePicker()」
value=「{startTime}」(日付フォーマットは「yyy-M-dd」に設定)
アクションの属性は、prvate Date startTimeと定義されている.
このように中国語環境(locale)のシステムでは問題ないですが、英語環境のシステムでは異常があります.理由は英語環境に「yyyy-M-dd」形式の日付がないため、変換過程に異常があるからです.
異常の原因がわかったら、解決方法があります.日付変換器を書いてください.
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;
import ognl.DefaultTypeConverter;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.time.DateUtils;
import org.apache.log4j.Logger;
public class DateConverter extends DefaultTypeConverter {
private static final Logger logger = Logger.getLogger(DateConverter.class);
private static final String DATETIME_PATTERN = "yyyy-MM-dd HH:mm:ss";
private static final String DATE_PATTERN = "yyyy-MM-dd";
private static final String MONTH_PATTERN = "yyyy-MM";
/**
* Convert value between types
*/
@SuppressWarnings("unchecked")
public Object convertValue(Map ognlContext, Object value, Class toType) {
Object result = null;
if (toType == Date.class) {
try {
result = doConvertToDate(value);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} else if (toType == String.class) {
result = doConvertToString(value);
}
return result;
}
/**
* Convert String to Date
*
* @param value
* @return
* @throws ParseException
*/
private Date doConvertToDate(Object value) throws ParseException {
Date result = null;
if (value instanceof String) {
result = DateUtils.parseDate((String) value, new String[] {
DATE_PATTERN, DATETIME_PATTERN, MONTH_PATTERN });
// all patterns failed, try a milliseconds constructor
if (result == null && StringUtils.isNotEmpty((String) value)) {
try {
result = new Date(new Long((String) value).longValue());
} catch (Exception e) {
logger.error("Converting from milliseconds to Date fails!");
e.printStackTrace();
}
}
} else if (value instanceof Object[]) {
// let's try to convert the first element only
Object[] array = (Object[]) value;
if ((array != null) && (array.length >= 1)) {
value = array[0];
result = doConvertToDate(value);
}
} else if (Date.class.isAssignableFrom(value.getClass())) {
result = (Date) value;
}
return result;
}
/**
* Convert Date to String
*
* @param value
* @return
*/
private String doConvertToString(Object value) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(
DATETIME_PATTERN);
String result = null;
if (value instanceof Date) {
result = simpleDateFormat.format(value);
}
return result;
}
}
この変換器をグローバルに登録することができます.classipathの下でxwork-conversion.propertiesファイルを作成します.内容は:java.util.Date=cn.anycal.com nversion.DateConterです.また、struts.xmlに直接定数を定義して、localeを「zhuCN」に設定しても解決できるという人がいます.
補足説明:
プロジェクトでは、他の同僚と会って、「yyyy-M-dd HH:mm:ss」でフォーマットしています.提出する時はいつも異常です.
後に転化をする時、stringのtrimで前後のスペースを削る必要があります.