2008年3月11日火曜日

ZK: jdbcManager Seasar変数(2)

可変長引数を持つメソッドはzscriptでは使用できないようです。


<zscript>
import zkseasar.entity.Emp;
emps = jdbcManager.from(Emp.class)
.where("sal >= ?", 2000)
.orderBy("sal")
.getResultList();
</zscript>

上記のスクリプトを実行すると次のエラーメッセージを吐いてしまいます。

致命的: サーブレット zkLoader のServlet.service()が例外を投げました
org.zkoss.zk.ui.UiException: Sourced file: inline evaluation of: ``import zkseasar.entity.Emp;
emps = jdbcManager.from(Emp.class) . . . '' :
Error in method invocation: Method where( java.lang.String, int ) not found in class'org.seasar.extension.jdbc.query.AutoSelectImpl' :

検索条件を指定するときはSQL文字列ではなくSimpleWhereが使えます。

<zscript >
import zkseasar.entity.Emp;
import org.seasar.extension.jdbc.where.SimpleWhere;
emps = jdbcManager.from(Emp.class)
.where(new SimpleWhere()
.ge("sal", 2000)
)
.orderBy("sal")
.getResultList();
</zscript>


Rubyからは可変長引数を持つJavaメソッドでも呼び出せるか試してみました。

<zscript language="ruby">
import 'zkseasar.entity.Emp'
emps = $jdbcManager.from(Java::ZkseasarEntity::Emp:Class).
where("sal >= ?", 2000).
orderBy("sal").
getResultList()

emps.each{|emp| print emp.deptId, "\t", emp.empName, "\t", emp.sal, "\n"}
</zscript>

やはりダメですね。

致命的: サーブレット zkLoader のServlet.service()が例外を投げました
:1: no where with arguments matching [class java.lang.String, class java.lang.Long]
on object JavaUtilities (NameError)
...internal jruby stack elided...

0 件のコメント: