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型プロパティ表示が。。。