[Seasar-user:17216] [S2JDBC] 検索条件の渡し方
oriwa
[E-MAIL ADDRESS DELETED]
2009年 4月 8日 (水) 10:34:20 JST
こんにちわ。
出羽健一さんが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 メーリングリストの案内