BeanUtils

ちょっとメモ。


FormのDate型プロパティに値を渡そうとしたらエラーになったから調べてみる。


ConvertUtilsBeanにConverterを登録すればできそう。
ちょっと試しで、DateConverterをこんな感じで作ってみて

package examples.common.converters;

import java.util.Date;

import org.apache.commons.beanutils.ConversionException;
import org.apache.commons.beanutils.Converter;

import examples.common.util.DateUtil;

public class DateConverter implements Converter {

	public Object convert(Class type, Object value) {
		if (value == null || value.toString().trim().length() == 0) {
			return null;
		}

		if (value instanceof Date) {
			return value;
		}

		try {
			return DateUtil.toDate(value.toString());
		} catch (RuntimeException e) {
			throw new ConversionException(e);
		}
	}

}

登録するためのServletをつくって

package examples.common.servlet;

import java.util.Date;

import javax.servlet.http.HttpServlet;

import org.apache.commons.beanutils.BeanUtilsBean;
import org.apache.commons.beanutils.ConvertUtilsBean;

import examples.common.converters.DateConverter;

public class RegistConverterServlet extends HttpServlet {

    public void init() {
        ConvertUtilsBean convertUtils = BeanUtilsBean.getInstance().getConvertUtils();
        convertUtils.register(new DateConverter(), Date.class);
    }

}

web.xmlに記述を追加して

  <servlet>
    <servlet-name>registConverter</servlet-name>
    <servlet-class>examples.common.servlet.RegistConverterServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>

Tomcatを起動して実験。
うまくいった。


なるほどー。
空のStringをnullとして設定してほしいなーって思ったことがあったけど、独自のStringConverterを作ればできるってことかー。




でも、SingletonのBeanUtilsBeanに対して独自のConverterを追加しても大丈夫なんかなー。空Stringの場合nullを返すってことにしたら、変なところでエラーがでたりして。。。


html:textのDate型プロパティ表示が。。。