お互いの規則

code-genとS2Dxoを使ってみた。良い感じ、良い感じ。


ただ、自分の使い方だとちょっとごまかしが必要となりそう。
code-genがFindDtoとして下のようなプロパティを生成してくれて、

    private Date hiredate = null;
    private Date hiredate_not = null;
    private Date hiredate_large = null;
    private Date hiredate_moreLarge = null;
    private Date hiredate_from = null;
    private Date hiredate_to = null;
    private Date hiredate_moreSmall = null;
    private Date hiredate_small = null;
    private List hiredate_in = null;
    //
    // getter と setter がそれぞれある
    //

FormBeanも手でhiredate_fromプロパティを作って、

    public String getHiredate_from() { }
    public void setHiredate_from(String hiredate_from) { }

S2Dxo

    EmpPackFindDto convertEmpPackFindDtoFrom(EmployeeSearchForm employeeSearchForm);

な感じで変換したら、

java.lang.IllegalArgumentException: Illegal pattern character 'f'
	at java.text.SimpleDateFormat.compile(SimpleDateFormat.java:678)
	at java.text.SimpleDateFormat.initialize(SimpleDateFormat.java:497)
	at java.text.SimpleDateFormat.<init>(SimpleDateFormat.java:446)
	at java.text.SimpleDateFormat.<init>(SimpleDateFormat.java:427)
	at org.seasar.extension.dxo.converter.impl.BeanConverter.getDateValueAsDate(BeanConverter.java:281)
	at org.seasar.extension.dxo.converter.impl.BeanConverter.getDateValue(BeanConverter.java:194)
	at org.seasar.extension.dxo.converter.impl.BeanConverter.setValue(BeanConverter.java:107)
	at org.seasar.extension.dxo.converter.impl.BeanConverter.setValues(BeanConverter.java:95)
	at org.seasar.extension.dxo.converter.impl.BeanConverter.convert(BeanConverter.java:80)
	at org.seasar.extension.dxo.converter.impl.BeanConverter.convert(BeanConverter.java:70)
	at org.seasar.extension.dxo.command.impl.BeanToBeanDxoCommand.convertScalar(BeanToBeanDxoCommand.java:42)

ってエラーになってしまった。。。


S2DxoがDateクラスのプロパティの場合、プロパティ名_YYYYMMDDとかでアンダーバー以降を日付のフォーマットとして利用してるからみたい。
なのでFormBeanのプロパティをとりあえず、

    public String getHiredateFrom() { }
    public void setHiredateFrom(String hiredate_from) { }

のようにアンダーバーがつかないようにして
S2Dxo

    String convertEmpPackFindDto_CONVERSION_RULE = "'hiredate_from' : hiredateFrom, 'hiredate_to' : hiredateTo";
    EmpPackFindDto convertEmpPackFindDtoFrom(EmployeeSearchForm employeeSearchForm);

ってアノテーションで指定したら、うまくいったー。勉強にもなったな。


よく考えたら、FormBeanに

    public String getHiredate() {
        return null;
    }

    public void setHiredate(String hiredate) {
    }

な感じでダミーのプロパティを作ってもうまくいきそうな気がしてきた。。。
試したら、やっぱりうまくいった。とりあえず、こっちの方法で置いておこう。