[Seasar-user:17227] Re: 2 2 検索条件の渡し方

oriwa [E-MAIL ADDRESS DELETED]
2009年 4月 8日 (水) 19:22:37 JST


こんにちわ。

自己解決しました。

>TodoCondDto cond = Beans.createAndCopy(TodoCondDto.class, todoForm).prefix("cond_").execute();

cond_categoryId_EQはIntegerで渡さなければならないため、.numberConverter("#", "categoryId_EQ")を加える。
BeanMap cond = Beans.createAndCopy(BeanMap.class, todoForm).prefix("cond_").numberConverter("#", "categoryId_EQ").execute();

上記の型変換ができないので、ActionFormを直接検索条件として、Serviceのメソッドの引数に渡すことはできない。


#メイルスレッド汚し、申し訳ありませんでした。

以上、よろしくお願いします。


----- Original Message -----
From: oriwa <[E-MAIL ADDRESS DELETED]>
To: [E-MAIL ADDRESS DELETED]
Sent: 8 Apr 2009 10:34:20 +0900
Subject: Re: [Seasar-user:17216]	[S2JDBC] 検索条件の渡し方


>こんにちわ。
>
>出羽健一さんがSesar conference 2008 Springにて公開した「StrutsからSAStrutsへ」のAppendix デモTodoアプリケーションの絞り込み機能から:
>
>このアプリケーションでは、FormやServiceが使用されていませんので、改変している段階で気づいたのですが、
>
>todoFormに下記のプロパティを設定し、BeanMapを生成し、Serviceに検索条件として渡したところ、
>public Integer cond_categoryId_EQ;
>public String cond_name_STARTS;
>
>BeanMap cond = Beans.createAndCopy(BeanMap.class, todoForm).prefix("cond_").execute();
>todoList = todoService.getList(cond);
>
>public List<Todo> getList(BeanMap cond) {
>	return select().leftOuterJoin(category())
>	.where(cond)
>	.getResultList();
>}
>
><html:select property="cond_categoryId_EQ" >
><option value="">----</option>
><html:options collection="categoryItems"
>property="id" labelProperty="name"/>
></html:select>
>
><option value="">の場合に、categoryId=nullという条件式が生成され、期待どおり動作しません。
>
>---
>todoFormを直接Serviceに渡した場合も同様でした。
>todoList = todoService.getListwithForm(todoForm);
>
>public List<Todo> getListwithForm(TodoForm cond) {
>	return select().leftOuterJoin(category())
>	.where(new SimpleWhere()
>	.eq(categoryId(),cond.cond_categoryId_EQ)
>	.starts(name(),cond.cond_name_STARTS))
>	.getResultList();
>
>---
>下記のプロパティを持つTodoCondDtoを用意し、todoFormから詰め替えて、Serviceに渡せば期待どおりに動作しました。
>#<option value="">の場合には、条件式が生成されない
>public Integer categoryId_EQ;
>public String name_STARTS;
>
>TodoCondDto cond = Beans.createAndCopy(TodoCondDto.class, todoForm).prefix("cond_").execute();
>todoList = todoService.getListwithDto(cond);
>
>public List<Todo> getListwithDto(TodoCondDto cond) {
>	return select().leftOuterJoin(category())
>	.where(new SimpleWhere()
>	.eq(categoryId(),cond.categoryId_EQ)
>	.starts(name(),cond.name_STARTS))
>	.getResultList();
>
>
>BeanMapやtodoFormをServiceに渡す方法の操作について、なにか間違っていますでしょうか?
>
>
>以上、よろしくお願いします。
>_______________________________________________
>Seasar-user mailing list
>[E-MAIL ADDRESS DELETED]
>https://ml.seasar.org/mailman/listinfo/seasar-user
>


Seasar-user メーリングリストの案内