[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 メーリングリストの案内