Beans.copyでBooleanを扱う
データベース上では char(1) のカラムでフラグとして扱い、JSP上では(Formでは) boolean にしてチェックボックスの on/off で使うということをした。
Entity → Form のBeans.copy は問題ない。"1"はtrueとしてくれるし、"0"はfalseとしてくれる。しかしだ。逆はこうなる。trueは"true"となり、falseは"false"となってしまうのだ。そりゃSQLExceptionになる。桁あふれしてしまう。
どうにかならんかなぁと思って、無理やりBooleanConverterを作った。
あってるかどうか自信ないけど。Commons Lang便利すぎ。
import org.apache.commons.lang.BooleanUtils; import org.seasar.framework.beans.Converter; public class BooleanConverter implements Converter { public BooleanConverter() { } public Object getAsObject(String value) { return BooleanUtils.toBooleanObject(value); } public String getAsString(Object value) { return BooleanUtils.toBoolean((Boolean)value) ? "1" : "0"; } public boolean isTarget(Class clazz) { return clazz == Boolean.class; } }
呼び出しは、
String[] boolColumns = {"col1", "col2"}; Beans.copy(form, entity).converter(new BooleanConverter(), boolColumns).execute();
という感じ。いちおう動いています。
こんなんでいいのかな?ギリギリずれてるような気もする。