<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8907821310655746853</id><updated>2012-02-17T06:17:43.183+09:00</updated><title type='text'>木茂佐平にっき</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://kemo-sah-bee.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://kemo-sah-bee.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>木茂佐平</name><uri>http://www.blogger.com/profile/01091843968689405775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>63</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8907821310655746853.post-3100932038884791337</id><published>2011-08-19T11:53:00.011+09:00</published><updated>2011-08-19T12:40:23.103+09:00</updated><title type='text'>ZK:グリッドに追加した最後の行を必ず見えるようにする</title><content type='html'>Clients.scrollIntoView(component)メソッドを使うことで、親エレメントをスクロールし、指定したエレメントを見えるようにすることができます。 &lt;a href="http://www.zkoss.org/forum/listComment/3784-how-to-auto-scroll-listbox-scrolling-bottom"&gt;元ネタ&lt;/a&gt; &lt;pre&gt;&lt;br /&gt;--- zul ---&lt;br /&gt;&amp;lt;window title="動的に追加した最後の行を必ず見えるようにする方法" border="normal"&lt;br /&gt;                     apply="ctrl.MyCtrl" width="350px"&amp;gt;&lt;br /&gt;    &amp;lt;grid height="50px"&amp;gt;&lt;br /&gt;        &amp;lt;rows id="rows" /&amp;gt;&lt;br /&gt;    &amp;lt;/grid&amp;gt;&lt;br /&gt;    &amp;lt;button label="行を追加" id="addBtn" /&amp;gt;&lt;br /&gt;&amp;lt;/window&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre&gt;&lt;br /&gt;--- java ---&lt;br /&gt;public class MyCtrl extends GenericForwardComposer {&lt;br /&gt;    private Rows rows;&lt;br /&gt;    private static int count=0;&lt;br /&gt;    @Override&lt;br /&gt;    public void doAfterCompose(Component comp) throws Exception {&lt;br /&gt;        super.doAfterCompose(comp);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void onClick$addBtn(){	&lt;br /&gt;        count++;&lt;br /&gt;        Row row =new Row();&lt;br /&gt;        row.appendChild(new Label("new"+count));&lt;br /&gt;        row.setParent(rows);&lt;br /&gt;        Clients.scrollIntoView(row);		&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8907821310655746853-3100932038884791337?l=kemo-sah-bee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kemo-sah-bee.blogspot.com/feeds/3100932038884791337/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8907821310655746853&amp;postID=3100932038884791337' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/3100932038884791337'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/3100932038884791337'/><link rel='alternate' type='text/html' href='http://kemo-sah-bee.blogspot.com/2011/08/zk.html' title='ZK:グリッドに追加した最後の行を必ず見えるようにする'/><author><name>木茂佐平</name><uri>http://www.blogger.com/profile/01091843968689405775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8907821310655746853.post-6852664650256596711</id><published>2011-08-09T13:05:00.004+09:00</published><updated>2011-08-19T12:33:20.857+09:00</updated><title type='text'>Javaコントローラ内でJavaScriptコードをコールする</title><content type='html'>&lt;a href="http://www.zkexamples.com/blog/posts/calling-javascript-code-from-within-a-java-controller/"&gt;元ネタ&lt;/a&gt;&lt;blockquote&gt;JavaのコントローラからJavaScriptのコードを実行させることが必要になるケースがあるかもしれません。例えばサーバ・プッシュを使い下記の様な処理をする場合が考えられます。&lt;li&gt;サーバ・サイドでイベントを発行する&lt;/li&gt;&lt;li&gt;そのイベントは専用のスレッドで操作される&lt;/li&gt;&lt;li&gt;そのスレッドの中からなにがしかのJava Script関数をコールしたい&lt;/li&gt;こんな時はこんな風に!!Clients.evalJavaScript("alert('Hello World!'));簡単でしょ?&lt;/blockquote&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;--- zul --&lt;br /&gt;&amp;lt;window title="JavaコントローラからJavaScript関数をコールする" &lt;br /&gt;       apply="zkexamples.ViewController2"  border="normal" width="350px"&gt;&lt;br /&gt;      &amp;lt;button id="btn" label="click"  /&gt;                  &lt;br /&gt;&amp;lt;/window&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre&gt;&lt;br /&gt;--- java ---&lt;br /&gt;public class ViewController2 extends GenericForwardComposer {&lt;br /&gt;    public void onClick$btn(Event event){&lt;br /&gt;        Clients.evalJavaScript("alert('Hello world!');");	&lt;br /&gt;   }&lt;br /&gt;   public void doAfterCompose(Component comp) throws Exception {&lt;br /&gt;        super.doAfterCompose(comp);&lt;br /&gt;    }	&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8907821310655746853-6852664650256596711?l=kemo-sah-bee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kemo-sah-bee.blogspot.com/feeds/6852664650256596711/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8907821310655746853&amp;postID=6852664650256596711' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/6852664650256596711'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/6852664650256596711'/><link rel='alternate' type='text/html' href='http://kemo-sah-bee.blogspot.com/2011/08/javajavascript.html' title='Javaコントローラ内でJavaScriptコードをコールする'/><author><name>木茂佐平</name><uri>http://www.blogger.com/profile/01091843968689405775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8907821310655746853.post-2459831207892771752</id><published>2011-08-01T17:27:00.005+09:00</published><updated>2011-08-02T16:55:39.933+09:00</updated><title type='text'>ZK: JavaScriptからJavaコントローラのメソッドをコールする</title><content type='html'>JavaScriptからコントローラ内のJavaメソッドをコールするときは、JavaScript内で親コンポーネントに対しイベントを送り、親コンポーネントのイベントハンドラでコールしたいJavaメソッドを呼び出すようにします。&lt;br /&gt;&lt;br /&gt;&lt;li&gt;サーバにイベントを送るJavaScript関数&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;   function callJavaMethod(){&lt;br /&gt;       zAu.send(new zk.Event(zk.Widget.$(this), 'onLinkClicked', 'Parameter'));&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;    zk.Widget.$(this)    =&gt; 親コンポーネント(この場合は "rootwindow"を指す)&lt;br /&gt;    'onLinkClicked'      =&gt; 送出するイベントを処理するコントローラのイベントハンドラメソッド名&lt;br /&gt;    'Parameter'          =&gt; イベントハンドラへ渡すパラメータ。(オプション)&lt;br /&gt;                             ※イベントハンドラ内で Event event を ForwardEventにキャストし&lt;br /&gt;                               getOrigin().getData()でパラメータの値を取得できる。&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;   &lt;br /&gt;&lt;br /&gt;&lt;li&gt;JavaScriptから送出されたイベントのイベントハンドラメソッド&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;    public void onLinkClicked$rootwindow(Event event){&lt;br /&gt;        someJavaMethod();&lt;br /&gt;   }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;--- zul ---&lt;br /&gt;&amp;lt;window id="rootwindow" &lt;br /&gt;    title="JavaScriptからJavaコントローラのメソッドをコールする" border="normal" &lt;br /&gt;                          apply="zkexamples.calljavafromjavascript.ViewController"&amp;gt;&lt;br /&gt;   &amp;lt;html&amp;gt;&amp;lt;![CDATA[&lt;br /&gt;    &amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;      function callJavaMethod(){&lt;br /&gt;       zAu.send(new zk.Event(zk.Widget.$(this), 'onLinkClicked', 'Parameter'));&lt;br /&gt;    }&lt;br /&gt;    &amp;lt;/script&amp;gt;&lt;br /&gt;    &amp;lt;a href="#" onClick="callJavaMethod();"&amp;gt;Click me&amp;lt;/a&amp;gt;&lt;br /&gt;    ]]&amp;gt;&amp;lt;/html&amp;gt;&lt;br /&gt;&amp;lt;/window&amp;gt;&lt;br /&gt;&lt;/pre&gt;  &lt;br /&gt;&lt;pre&gt;&lt;br /&gt;--- java ---&lt;br /&gt;public class ViewController extends GenericForwardComposer {&lt;br /&gt;&lt;br /&gt;    // JavaScriptからイベントハンドラを経由してコールされるコントローラのメソッド&lt;br /&gt;    private void callMe() {&lt;br /&gt;        alert("Hello JavaScript, this is Java!");&lt;br /&gt;    } &lt;br /&gt;   &lt;br /&gt;    // コントローラのイベントハンドラ名の最後に親コンポーネント名をつけること忘れないこと!!&lt;br /&gt;    public void onLinkClicked$rootwindow(Event event){&lt;br /&gt;        ForwardEvent fevent = (ForwardEvent)event;&lt;br /&gt;        System.out.println(fevent.getOrigin().getData()); &lt;br /&gt;        callMe();&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8907821310655746853-2459831207892771752?l=kemo-sah-bee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kemo-sah-bee.blogspot.com/feeds/2459831207892771752/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8907821310655746853&amp;postID=2459831207892771752' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/2459831207892771752'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/2459831207892771752'/><link rel='alternate' type='text/html' href='http://kemo-sah-bee.blogspot.com/2011/08/zk-javascriptjava.html' title='ZK: JavaScriptからJavaコントローラのメソッドをコールする'/><author><name>木茂佐平</name><uri>http://www.blogger.com/profile/01091843968689405775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8907821310655746853.post-4184985128731914889</id><published>2011-07-22T14:51:00.017+09:00</published><updated>2011-07-25T08:56:12.105+09:00</updated><title type='text'>ZK: Fileアップロードサンプル</title><content type='html'>ZKForum の&lt;a href="http://www.zkoss.org/forum/listComment/13529"&gt;この&lt;/a&gt;スレッドで紹介されていたヘルパークラスを使い、アップロードされたファイルをサーバに格納するサンプルです。&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;簡単な使い方:&lt;br /&gt;--- zul ---&lt;br /&gt;&amp;lt;button id="uploadBtn" label="Upload file" upload="true,maxsize=300"/&amp;gt;&lt;br /&gt;&lt;br /&gt;--- java ---&lt;br /&gt;public void onUpload$uploadBtn(UploadEvent event) throws InterruptedException {&lt;br /&gt;    org.zkoss.util.media.Media media = event.getMedia();  &lt;br /&gt;    Medias.saveToFile(media, "/path/to/save");;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;ソース&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;ヘルパークラス&lt;br /&gt;--- Medias.java ---&lt;br /&gt;import java.io.BufferedInputStream;&lt;br /&gt;import java.io.BufferedReader;&lt;br /&gt;import java.io.ByteArrayInputStream;&lt;br /&gt;import java.io.File;&lt;br /&gt;import java.io.FileOutputStream;&lt;br /&gt;import java.io.InputStream;&lt;br /&gt;import java.io.OutputStream;&lt;br /&gt;import java.io.Reader;&lt;br /&gt;import java.io.StringReader;&lt;br /&gt;&lt;br /&gt;import org.apache.commons.io.IOUtils;&lt;br /&gt;import org.zkoss.util.media.Media;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;public class Medias {&lt;br /&gt; &lt;br /&gt; public static File saveToFile(Media media, String path) {&lt;br /&gt;    try {&lt;br /&gt;       File file = new File(path + File.separator + media.getName());&lt;br /&gt;       OutputStream output = new FileOutputStream(file);&lt;br /&gt;       if (media.isBinary()) {&lt;br /&gt;           InputStream input = Medias.asStream(media);&lt;br /&gt;           IOUtils.copy(input, output);&lt;br /&gt;           input.close();&lt;br /&gt;       } else {&lt;br /&gt;           Reader input = Medias.asReader(media);&lt;br /&gt;           IOUtils.copy(input, output);&lt;br /&gt;           input.close();&lt;br /&gt;       }&lt;br /&gt;       output.close();&lt;br /&gt;       return file;&lt;br /&gt;    } catch (Exception e) {&lt;br /&gt;        throw new RuntimeException(e);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public static String asString(Media media) {&lt;br /&gt;    try {&lt;br /&gt;        String result = null;&lt;br /&gt;        if (media.isBinary()) {&lt;br /&gt;        InputStream input = Medias.asStream(media);&lt;br /&gt;        result = IOUtils.toString(input);&lt;br /&gt;        input.close();&lt;br /&gt;    } else {&lt;br /&gt;        Reader reader = Medias.asReader(media);&lt;br /&gt;        result = IOUtils.toString(reader);&lt;br /&gt;        reader.close();&lt;br /&gt;    }&lt;br /&gt;        return result;&lt;br /&gt;    } catch (Exception e) {&lt;br /&gt;        throw new RuntimeException(e);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;private static InputStream asStream(Media media) {&lt;br /&gt;    return new BufferedInputStream(&lt;br /&gt;        media.inMemory() ?  &lt;br /&gt;            new ByteArrayInputStream(media.getByteData()): media.getStreamData());&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;private static Reader asReader(Media media) {      &lt;br /&gt;    return new BufferedReader(media.inMemory() ? &lt;br /&gt;           new StringReader(media.getStringData()) : media.getReaderData());&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;ビュー&lt;br /&gt;--- fileupload.zul ----&lt;br /&gt;&amp;lt;?page title="ファイルアップロード" contentType="text/html;charset=UTF-8"?&amp;gt;&lt;br /&gt;&amp;lt;zk&amp;gt;&lt;br /&gt;&amp;lt;window title="ファイルアップロード" border="normal" apply="sample.ctrl.UploadCtrl "&amp;gt;&lt;br /&gt;  &amp;lt;button id="uploadBtn" label="Upload file" upload="true,maxsize=300" /&amp;gt;&lt;br /&gt;  &amp;lt;separator /&amp;gt;&lt;br /&gt;  &amp;lt;image id="img" /&amp;gt;&lt;br /&gt;  &amp;lt;separator /&amp;gt;&lt;br /&gt;  &amp;lt;label id="msgLbl" /&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/window&amp;gt;&lt;br /&gt;&amp;lt;/zk&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;コントローラ&lt;br /&gt;--- FileUploadCtrl.java ---&lt;br /&gt;public class FileUploadCtrl extends GenericForwardComposer {&lt;br /&gt;private Label msgLbl;&lt;br /&gt;    private Image img;&lt;br /&gt;&lt;br /&gt;    public void onUpload$uploadBtn(UploadEvent event) throws InterruptedException  {    &lt;br /&gt;        msgLbl.setValue("");&lt;br /&gt;        org.zkoss.util.media.Media media = event.getMedia();  &lt;br /&gt;&lt;br /&gt;        if(media == null){&lt;br /&gt;            msgLbl.setValue("ファイルを選択してください。");&lt;br /&gt;            return;&lt;br /&gt;         }&lt;br /&gt;&lt;br /&gt;         if (media instanceof org.zkoss.image.Image) {&lt;br /&gt;              org.zkoss.zul.Image image = new org.zkoss.zul.Image();&lt;br /&gt;              image.setContent((org.zkoss.image.Image)media);&lt;br /&gt;              image.setParent(img);&lt;br /&gt;         }&lt;br /&gt;&lt;br /&gt;         Medias.saveToFile(media, "/path/to/save");;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8907821310655746853-4184985128731914889?l=kemo-sah-bee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kemo-sah-bee.blogspot.com/feeds/4184985128731914889/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8907821310655746853&amp;postID=4184985128731914889' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/4184985128731914889'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/4184985128731914889'/><link rel='alternate' type='text/html' href='http://kemo-sah-bee.blogspot.com/2011/07/zk-file.html' title='ZK: Fileアップロードサンプル'/><author><name>木茂佐平</name><uri>http://www.blogger.com/profile/01091843968689405775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8907821310655746853.post-6820489608535408518</id><published>2011-07-16T10:39:00.013+09:00</published><updated>2011-07-16T11:19:59.627+09:00</updated><title type='text'>ZK: コミュニティ・エディションで Captchaを使う</title><content type='html'>ZK コミュニティ・エディション(CE)では残念ながらCaptchaコンポーネントを利用することができません。&lt;br /&gt;しかし SimpleCaptcha を用いることで、CEでも Captchaを簡単に利用することができる方法が ZKforum で紹介されていたのでまとめてみました。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.zkoss.org/forum/listComment/16738-captcha-code"&gt;元ネタ&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://simplecaptcha.sourceforge.net/"&gt;SimpleCaptcha&lt;/a&gt; サイトからsimplecaptcha.jarをダウンロードし WEB-INF/libへ配備する。&lt;br /&gt;&lt;br /&gt;&lt;li&gt;CaptchaUtils クラスを作成する。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;import nl.captcha.Captcha;&lt;br /&gt;import nl.captcha.backgrounds.GradiatedBackgroundProducer;&lt;br /&gt;import nl.captcha.text.renderer.ColoredEdgesWordRenderer;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; * CAPTCHAを作成するユーティリティクラス &amp;lt;br&amp;gt;&lt;br /&gt; * Captchaは直接 org.zkoss.zul.Imageにロード可能 &amp;lt;br&amp;gt;&lt;br /&gt; * &lt;br /&gt; * &amp;lt;pre&amp;gt;&lt;br /&gt; * Image img = new org.zkoss.zul.Image();&lt;br /&gt; * img.setContent(CaptchaUtils.getCaptcha());&lt;br /&gt; * &lt;br /&gt; * String verifyStr = captcha.getAnswer();&lt;br /&gt; * &amp;lt;/pre&amp;gt;&lt;br /&gt; * &lt;br /&gt; * @author Stephan Gerth&lt;br /&gt; */&lt;br /&gt;public class CaptchaUtils &lt;br /&gt;    public CaptchaUtils(){&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;    * 5桁のキャプチャを作成する&lt;br /&gt;    */&lt;br /&gt;    public static Captcha getCaptcha() {&lt;br /&gt;&lt;br /&gt;        Captcha captcha = new Captcha.Builder(140, 50)&lt;br /&gt;                       .addText(new ColoredEdgesWordRenderer()).addNoise()&lt;br /&gt;                       .addBackground(new GradiatedBackgroundProducer())&lt;br /&gt;                       .addBorder()&lt;br /&gt;                       .build();&lt;br /&gt;&lt;br /&gt;        return captcha;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;コントローラ クラスを作成する。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;public class CaptchaCtrl extends GenericForwardComposer {&lt;br /&gt;    private static final long serialVersionUID = -804655396850565215L;&lt;br /&gt;    private Image img_captcha;&lt;br /&gt;    private Textbox txt_captcha;&lt;br /&gt;    private Captcha captcha;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;    public void onCreate$win(Event event){&lt;br /&gt;        doReCaptcha();&lt;br /&gt;    }&lt;br /&gt; &lt;br /&gt;    public void onClick$btn1(Event event){&lt;br /&gt;        if (txt_captcha.getValue().equals(captcha.getAnswer())){&lt;br /&gt;            alert("正しいキャプチャです。"); &lt;br /&gt;        } else { &lt;br /&gt;            alert("間違っています!!"); &lt;br /&gt;       } &lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void onClick$btn2(Event event){&lt;br /&gt;        doReCaptcha();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;    * キャプチャを再表示する&amp;lt;br&amp;gt;&lt;br /&gt;    * &lt;br /&gt;    */&lt;br /&gt;    private void doReCaptcha() {&lt;br /&gt;        captcha = CaptchaUtils.getCaptcha();&lt;br /&gt;        img_captcha.setContent(captcha.getImage());&lt;br /&gt;    } &lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;ZULを作成する。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;window id="win"  border="normal" width="350px" &lt;br /&gt;          title="コミュニティ・エディションでもキャプチャが使えます"  apply="ctrl.CaptchaCtrl" &amp;gt;&lt;br /&gt;    &amp;lt;vlayout id="input" width="100%" &amp;gt;&lt;br /&gt;        &amp;lt;hbox&amp;gt;&lt;br /&gt;            &amp;lt;image id="img_captcha" /&amp;gt; &lt;br /&gt;            &amp;lt;button label="再表示" id="btn2"/&amp;gt;  &lt;br /&gt;        &amp;lt;/hbox&amp;gt;&lt;br /&gt;    キャプチャを入力してください。 &lt;br /&gt;        &amp;lt;textbox id="txt_captcha" hflex="1" width="250px"/&amp;gt;&lt;br /&gt;        &amp;lt;button label="確認" id="btn1"/&amp;gt; &lt;br /&gt;   &amp;lt;/vlayout&amp;gt; &lt;br /&gt;&amp;lt;/window&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-ICE8GBaWE98/TiDxJ5RU_sI/AAAAAAAAAIo/sCUuSW-uXqY/s1600/ce-captcha.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 143px;" src="http://2.bp.blogspot.com/-ICE8GBaWE98/TiDxJ5RU_sI/AAAAAAAAAIo/sCUuSW-uXqY/s320/ce-captcha.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5629764686507736770" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8907821310655746853-6820489608535408518?l=kemo-sah-bee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kemo-sah-bee.blogspot.com/feeds/6820489608535408518/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8907821310655746853&amp;postID=6820489608535408518' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/6820489608535408518'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/6820489608535408518'/><link rel='alternate' type='text/html' href='http://kemo-sah-bee.blogspot.com/2011/07/zk-captcha.html' title='ZK: コミュニティ・エディションで Captchaを使う'/><author><name>木茂佐平</name><uri>http://www.blogger.com/profile/01091843968689405775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-ICE8GBaWE98/TiDxJ5RU_sI/AAAAAAAAAIo/sCUuSW-uXqY/s72-c/ce-captcha.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8907821310655746853.post-1336234269803888739</id><published>2010-05-10T18:04:00.004+09:00</published><updated>2010-05-11T09:58:12.839+09:00</updated><title type='text'>ubuntu10.04でeee-controlを動作させる</title><content type='html'>連休も終わりUbuntu10.04のダウンロード数も一段落したことと思い、我が愛機Eeepc1005にUbuntu10.04をインストールしてみた。&lt;br /&gt;インストールは相変わらず簡単、黒を基調にしたデスクトップも渋くて気に入った。&lt;br /&gt;eee-controlのインストールがすんなりとはいかなかったのでメモメモ。&lt;br /&gt;&lt;br /&gt;・リポジトリを追加&lt;br /&gt; メニューより&lt;br /&gt;&lt;pre&gt;&lt;br /&gt; システム&gt;システム管理&gt; ソフトウェア・ソースを選択&lt;br /&gt;      ソフトウェア・ソース画面の[他のソフトウェア]タブを選択&lt;br /&gt;       [追加]をクリック&lt;br /&gt;      APTライン: ppa:eee-control/eee-controlを入力&lt;br /&gt;      [ソースを追加]をクリック&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;・パッケージをインストール&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;  $ sudo apt-get install eee-control &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;・アプリケーション&gt;システムツール&gt;よりEeeControlを起動するが動作しない。&lt;br /&gt;&lt;br /&gt;[対処法]&lt;br /&gt;・/etc/default/grub のGRUB_CMDLINE_LINUX_DEFAULTの行の最後に acpi_osi=Linuxを追加する。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt; $ sudo vi /etc/default/grub&lt;br /&gt; #GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"&lt;br /&gt; GRUB_CMDLINE_LINUX_DEFAULT="quiet splash acpi_osi=Linux"&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;・GRUBの設定を書き換え、OSを再起動&lt;br /&gt;&lt;pre&gt;&lt;br /&gt; $ sudo update-grub&lt;br /&gt; $ sudo shutdown -r now&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;動作確認 OK。&lt;br /&gt;キモサベ！！&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8907821310655746853-1336234269803888739?l=kemo-sah-bee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kemo-sah-bee.blogspot.com/feeds/1336234269803888739/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8907821310655746853&amp;postID=1336234269803888739' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/1336234269803888739'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/1336234269803888739'/><link rel='alternate' type='text/html' href='http://kemo-sah-bee.blogspot.com/2010/05/ubuntu1004-eee-control.html' title='ubuntu10.04でeee-controlを動作させる'/><author><name>木茂佐平</name><uri>http://www.blogger.com/profile/01091843968689405775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8907821310655746853.post-6235823757283363574</id><published>2009-12-05T11:14:00.002+09:00</published><updated>2009-12-05T11:20:04.459+09:00</updated><title type='text'>ruby-oci8からOracleへ接続 CGI文字化け</title><content type='html'>http://ruby-oci8.rubyforge.org/ja/InstallForInstantClient.html&lt;br /&gt;を参考にセットアップ&lt;br /&gt;&lt;br /&gt;環境&lt;br /&gt;Ubuntu 8.04&lt;br /&gt;Ruby1.8.6&lt;br /&gt;Apache 2.2.8&lt;br /&gt;Oracle Instantclient 11.2&lt;br /&gt;ruby-oci8&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;環境変数設定&lt;br /&gt;$ export LD_LIBRARY_PATH=/opt/oracle/instantclient_11_2&lt;br /&gt;$ export NLS_LANG=Japanese_Japan.UTF8&lt;br /&gt;&lt;br /&gt;でコンソールでは文字化けせずに日本語の入った列もselectできた。&lt;br /&gt;ところが同じスクリプトをCGIから実行すると日本語が文字化けする。&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;[Fri Dec 04 08:44:47 2009] [error] [client 127.0.0.1] Premature end of script headers: hogehoge.cgi&lt;br /&gt;env.c:257:in oci8lib.so: Error while trying to retrieve text for error ORA-12705 (OCIError)&lt;br /&gt;        from /usr/local/lib/site_ruby/1.8/oci8.rb:229:in `initialize'&lt;br /&gt;        from /usr/local/lib/site_ruby/1.8/hoge/hogehoge.rb:309:in `new'&lt;br /&gt;        from /usr/local/lib/site_ruby/1.8/hoge/hogehoge.rb:309:in `initialize'&lt;br /&gt;        from /var/www/hogehoge.cgi:4:in `new'&lt;br /&gt;        from /var/www/hogehoge.cgi:4&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Apacheの起動スクリプトに環境変数を設定してもだめ、検索した結果Apacheの環境変数は&lt;br /&gt;SetEvnディレクティブでセットすることが分かりapache2.confを編集後再起動し無事に日&lt;br /&gt;本語が表示できた。&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;...&lt;br /&gt;SetEnv LD_LIBRARY_PATH /opt/oracle/instantclient_11_2&lt;br /&gt;SetEnv NLS_LANG Japanese_JAPAN.UTF8&lt;br /&gt;...&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;/etc/apache2/apache2.conf&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8907821310655746853-6235823757283363574?l=kemo-sah-bee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kemo-sah-bee.blogspot.com/feeds/6235823757283363574/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8907821310655746853&amp;postID=6235823757283363574' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/6235823757283363574'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/6235823757283363574'/><link rel='alternate' type='text/html' href='http://kemo-sah-bee.blogspot.com/2009/12/ruby-oci8oracle-cgi.html' title='ruby-oci8からOracleへ接続 CGI文字化け'/><author><name>木茂佐平</name><uri>http://www.blogger.com/profile/01091843968689405775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8907821310655746853.post-2336180057645165688</id><published>2009-07-06T14:58:00.012+09:00</published><updated>2009-07-29T10:09:08.722+09:00</updated><title type='text'>Trac:ワークフローをカスタマイズする</title><content type='html'>Tracのデフォルトのワークフローは僕にとってあまり直感的ではないのでカスタマイズしてみる。&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;着手するまでは課題を修正できる。&lt;/li&gt;&lt;br /&gt;&lt;li&gt;着手したら解決するだけ。&lt;/li&gt;&lt;br /&gt;&lt;li&gt;解決した課題は終了するか、差し戻しにする。&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;だけのワークフローにしよう。&lt;br /&gt;Tracプロジェクトディレクトリ/conf/trac.iniを編集する。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;[ticket-workflow]&lt;br /&gt;revise = new,revised -&gt; revised&lt;br /&gt;revise.name = 課題を修正する&lt;br /&gt;revise.permissions = TICKET_MODIFY&lt;br /&gt;&lt;br /&gt;accept = new,revised,reopened -&gt; accepted&lt;br /&gt;accept.name = 着手する&lt;br /&gt;accept.operations = set_owner_to_self&lt;br /&gt;accept.permissions = TICKET_MODIFY&lt;br /&gt;&lt;br /&gt;reopen = resolved,closed -&gt; reopened&lt;br /&gt;reopen.operation = del_resolution&lt;br /&gt;reopen.permissions = TICKET_CREATE&lt;br /&gt;reopen.name = 差し戻す&lt;br /&gt;&lt;br /&gt;resolve = accepted -&gt; resolved&lt;br /&gt;resolve.name = 解決にする&lt;br /&gt;resolve.operations = set_resolution&lt;br /&gt;resolve.permissions = TICKET_MODIFY&lt;br /&gt;&lt;br /&gt;close = resolved -&gt; closed&lt;br /&gt;close.name = 終了にする&lt;br /&gt;close.permissions = TICKET_MODIFY&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;カスタマイズしたワークフローを画像で確認する。&lt;/p&gt;&lt;br /&gt;trac.iniファイルをworkflow_parser.pyで処理して.dotファイルを作成してからGraphvizのdotコマンドでdotファイルを処理し画像ファイルに変換することで視覚化出きるそうだ。&lt;br /&gt;&lt;br /&gt;workflow_parser.pyでtrac.iniファイルを処理し.dotファイルを作成する。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;Trac-0.11.2.1.ja1/contrib/workflow/workflow_parser.py trac.ini&lt;br /&gt;...&lt;br /&gt;UnicodeEncodeError: 'ascii' codec can't encode ...&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;どうやらUTF-8でエンコードした日本語をasciiとして扱っているみたい。&lt;br /&gt;&lt;a href="http://trac.edgewall.org/ticket/6930"&gt;http://trac.edgewall.org/ticket/6930&lt;/a&gt; によるとworkflow_parser.py を修正すれば良いようだ。&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;import locale, codecs を追加し&lt;br /&gt;sys.stdout.write(''.join(digraph_lines))&lt;br /&gt;を&lt;br /&gt;sys.stdout = codecs.getwriter(locale.getpreferredencoding())(sys.stdout);&lt;br /&gt;sys.stdout.write(''.join(digraph_lines))&lt;br /&gt;に修正してから動作確認。&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ workfloe_parser.py trac.ini &gt; trac.dot&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;今度は無事dotファイルが作成できたようだ。&lt;br /&gt;Graphvizのdotコマンドでdotファイルを処理し画像ファイルに変換する。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ dot -T png &lt; trac.dot &gt; trac.png&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_OF_auIfbUdk/SlGX3yqwkDI/AAAAAAAAAHM/f_dyuqdi-1I/s1600-h/trac.png"&gt;&lt;img style="cursor: pointer; width: 320px; height: 177px;" src="http://3.bp.blogspot.com/_OF_auIfbUdk/SlGX3yqwkDI/AAAAAAAAAHM/f_dyuqdi-1I/s320/trac.png" alt="" id="BLOGGER_PHOTO_ID_5355228416669945906" border="0" /&gt;&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;いいじゃないですか！！&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8907821310655746853-2336180057645165688?l=kemo-sah-bee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kemo-sah-bee.blogspot.com/feeds/2336180057645165688/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8907821310655746853&amp;postID=2336180057645165688' title='1 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/2336180057645165688'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/2336180057645165688'/><link rel='alternate' type='text/html' href='http://kemo-sah-bee.blogspot.com/2009/07/trac.html' title='Trac:ワークフローをカスタマイズする'/><author><name>木茂佐平</name><uri>http://www.blogger.com/profile/01091843968689405775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_OF_auIfbUdk/SlGX3yqwkDI/AAAAAAAAAHM/f_dyuqdi-1I/s72-c/trac.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8907821310655746853.post-1785150928505514058</id><published>2008-12-24T14:26:00.000+09:00</published><updated>2008-12-24T14:27:34.743+09:00</updated><title type='text'>ZK: MVC ラベルの日付を和暦で表示する</title><content type='html'>DateUserを参考に日付を和暦(元号)で表示する。(Java6)&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;public class DateUserWAREKI implements TypeConverter {&lt;br /&gt;&lt;br /&gt;    @Override&lt;br /&gt;    public Object coerceToBean(Object arg0, Component arg1) {&lt;br /&gt;        // TODO Auto-generated method stub&lt;br /&gt;        return null;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    @Override&lt;br /&gt;    public Object coerceToUi(Object arg0, Component arg1) {&lt;br /&gt;        if (arg0 == null) {&lt;br /&gt;            return null;&lt;br /&gt;        }&lt;br /&gt;        Locale locale = Locale("ja","JP","JP");&lt;br /&gt;        SimpleDateFormat sdf = new SimpleDateFormat("GGGGyy年M月d日", locale);&lt;br /&gt;        Date date = (Date) arg0;&lt;br /&gt;        return sdf.format(date);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;listcell label="@{employee.hireDate, converter='org.zkforge.converters.DateUserWAREKI'}"/&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8907821310655746853-1785150928505514058?l=kemo-sah-bee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kemo-sah-bee.blogspot.com/feeds/1785150928505514058/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8907821310655746853&amp;postID=1785150928505514058' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/1785150928505514058'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/1785150928505514058'/><link rel='alternate' type='text/html' href='http://kemo-sah-bee.blogspot.com/2008/12/zk-mvc_4605.html' title='ZK: MVC ラベルの日付を和暦で表示する'/><author><name>木茂佐平</name><uri>http://www.blogger.com/profile/01091843968689405775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8907821310655746853.post-609546631752684967</id><published>2008-12-24T14:23:00.002+09:00</published><updated>2008-12-24T14:25:36.733+09:00</updated><title type='text'>ZK: MVC  ラベルの日付をyyyy/MM/dd形式で表示する</title><content type='html'>http://www.pichelhofer.at/ZKDemoで紹介されているTypeConverterを利用し日付をロケールに合わせて表示する。&lt;br /&gt;&lt;br /&gt;http://www.pichelhofer.at/ZKDemo/src/DateUser.java.html&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;listcell label="@{employee.hireDate, converter='org.zkforge.converters.DateUser'}"/&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8907821310655746853-609546631752684967?l=kemo-sah-bee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kemo-sah-bee.blogspot.com/feeds/609546631752684967/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8907821310655746853&amp;postID=609546631752684967' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/609546631752684967'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/609546631752684967'/><link rel='alternate' type='text/html' href='http://kemo-sah-bee.blogspot.com/2008/12/zkmvc-yyyymmdd.html' title='ZK: MVC  ラベルの日付をyyyy/MM/dd形式で表示する'/><author><name>木茂佐平</name><uri>http://www.blogger.com/profile/01091843968689405775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8907821310655746853.post-3544575159073668197</id><published>2008-12-24T14:18:00.002+09:00</published><updated>2008-12-24T14:22:32.607+09:00</updated><title type='text'>ZK: MVC  変数selectedにアクセスする</title><content type='html'>ビューの変数selectedにコントローラからアクセスする。&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;public void onClick$selectedBtn(Event e) throws Exception{&lt;br /&gt;   Employee selected =(Employee)win.getVariable("selected", true);&lt;br /&gt;   if (selected != null){&lt;br /&gt;       alert(selected.firstName);&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8907821310655746853-3544575159073668197?l=kemo-sah-bee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kemo-sah-bee.blogspot.com/feeds/3544575159073668197/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8907821310655746853&amp;postID=3544575159073668197' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/3544575159073668197'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/3544575159073668197'/><link rel='alternate' type='text/html' href='http://kemo-sah-bee.blogspot.com/2008/12/zk-mvc-selected.html' title='ZK: MVC  変数selectedにアクセスする'/><author><name>木茂佐平</name><uri>http://www.blogger.com/profile/01091843968689405775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8907821310655746853.post-6568734940395032705</id><published>2008-12-24T14:16:00.001+09:00</published><updated>2008-12-24T14:22:58.271+09:00</updated><title type='text'>ZK: MVC リストボックスをクリアする</title><content type='html'>データバインドされているリストボックスをクリアするにはbeanにnullを代入し、&lt;br /&gt;データバインダを使用してデータロードする。&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;public void onClick$clearBtn(Event e) throws Exception{&lt;br /&gt;    empData = null;&lt;br /&gt;    empListbox.unsetVariable("selected", true);&lt;br /&gt;    binder = (AnnotateDataBinder)page.getVariable("binder");&lt;br /&gt;    binder.loadAll();&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8907821310655746853-6568734940395032705?l=kemo-sah-bee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kemo-sah-bee.blogspot.com/feeds/6568734940395032705/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8907821310655746853&amp;postID=6568734940395032705' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/6568734940395032705'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/6568734940395032705'/><link rel='alternate' type='text/html' href='http://kemo-sah-bee.blogspot.com/2008/12/zk-mvc_603.html' title='ZK: MVC リストボックスをクリアする'/><author><name>木茂佐平</name><uri>http://www.blogger.com/profile/01091843968689405775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8907821310655746853.post-2453282358299635023</id><published>2008-12-24T14:15:00.003+09:00</published><updated>2008-12-24T14:18:40.441+09:00</updated><title type='text'>ZK: MVC  選択を解除する</title><content type='html'>unsetVariableメソッドを使いlistboxからselected変数を取り除いた後、&lt;br /&gt;データバインダを使用してデータをロードし直すことでリストボックスの選択を解除し、&lt;br /&gt;明細をクリアできる。&lt;br /&gt;&lt;pre&gt;   &lt;br /&gt; public void onClick$clearSelBtn(Event e) throws Exception{&lt;br /&gt;        empListbox.unsetVariable("selected", true);&lt;br /&gt;        binder = (AnnotateDataBinder)page.getVariable("binder");&lt;br /&gt;        binder.loadAll();&lt;br /&gt;    }&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8907821310655746853-2453282358299635023?l=kemo-sah-bee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kemo-sah-bee.blogspot.com/feeds/2453282358299635023/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8907821310655746853&amp;postID=2453282358299635023' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/2453282358299635023'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/2453282358299635023'/><link rel='alternate' type='text/html' href='http://kemo-sah-bee.blogspot.com/2008/12/zk-mvc_24.html' title='ZK: MVC  選択を解除する'/><author><name>木茂佐平</name><uri>http://www.blogger.com/profile/01091843968689405775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8907821310655746853.post-1019318342626638988</id><published>2008-12-24T14:15:00.001+09:00</published><updated>2008-12-24T14:15:19.008+09:00</updated><title type='text'></title><content type='html'>&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8907821310655746853-1019318342626638988?l=kemo-sah-bee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kemo-sah-bee.blogspot.com/feeds/1019318342626638988/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8907821310655746853&amp;postID=1019318342626638988' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/1019318342626638988'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/1019318342626638988'/><link rel='alternate' type='text/html' href='http://kemo-sah-bee.blogspot.com/2008/12/blog-post_24.html' title=''/><author><name>木茂佐平</name><uri>http://www.blogger.com/profile/01091843968689405775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8907821310655746853.post-2154179151699796597</id><published>2008-12-10T17:28:00.004+09:00</published><updated>2008-12-10T17:43:17.691+09:00</updated><title type='text'>ZK: MVC</title><content type='html'>GenericFowardComposerを拡張したコントローラ・クラスを作成しwindowのapply属性の値に設定すると、イベント・リスナーが自動的に登録されると同時にzulコンポーネントとコントローラのフィールドが自動的に紐つけられる。このためコントローラのコードが非常にすっきり記述できるようになった。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;ボタンをクリックすると2個のintboxの値を足し算しlabelへ表示するサンプル&lt;/span&gt;&lt;br /&gt;ビュー&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;window id="win" title="MVCサンプル" border="normal" width="300px" apply="Controler1"&amp;gt;&lt;br /&gt;  &amp;lt;hbox&amp;gt;&lt;br /&gt;    &amp;lt;intbox id="arg1"/&amp;gt; + &amp;lt;intbox id="arg2"/&amp;gt; &amp;lt;button label=" = " id="addBtn" /&amp;gt; &amp;lt;label id = "ans"/&amp;gt;&lt;br /&gt;  &amp;lt;/hbox&amp;gt;   &lt;br /&gt;&amp;lt;/window&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;コントローラ&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;public class Controler1 extends GenericForwardComposer {&lt;br /&gt;    private Intbox arg1;    //ビューの&amp;lt;intbox id="arg1"/&amp;gt;コンポーネントと自動的に紐付けされる&lt;br /&gt;    private Intbox arg2;    //ビューの&amp;lt;intbox id="arg2"/&amp;gt;コンポーネントと自動的に紐付けされる&lt;br /&gt;    private Label ans;      //ビューの&amp;lt;label id="and"/&amp;gt;コンポーネントと自動的に紐付けされる&lt;br /&gt;   &lt;br /&gt;   // addBtnボタンの onClickイベント・リスナー&lt;br /&gt;    public void onClick$addBtn(Event e) throws Exception{&lt;br /&gt;        ans.setValue(String.valueOf(arg1.getValue() + arg2.getValue()));&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;コントローラでビューのzulコンポーネントと同じ型でidと同じ名称のフィールドを宣言するとzulコンポーネントと自動的に紐つけされる。&lt;br /&gt;onイベント名$コンポーネント名の形でイベント・リスナーを書いておけば自動的に登録され対応するビューのコンポーネントのイベントが処理できる&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_OF_auIfbUdk/ST9-rJyPLHI/AAAAAAAAAGQ/aYukJDItceQ/s1600-h/mvc1.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 310px; height: 65px;" src="http://1.bp.blogspot.com/_OF_auIfbUdk/ST9-rJyPLHI/AAAAAAAAAGQ/aYukJDItceQ/s320/mvc1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5278076568127614066" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;データバインド&lt;/span&gt;&lt;br /&gt;S2JDBCを使いFirebirdに付属のemployeeテーブルをリストと明細で表示するサンプル。&lt;br /&gt;&lt;br /&gt;データバインダを利用するにはビューを&amp;lt;?init class="org.zkoss.zkplus.AnnotateDataBinderInit" ?&amp;gt;で初期化する。&lt;br /&gt;バリアブル・リゾルバにorg.zkoss.zkplus.seasar.DelegatingVariableResolverを使用しSeasar変数jdbcManagerを利用できるようにする。&lt;br /&gt;&lt;br /&gt;ビュー&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;?init class="org.zkoss.zkplus.databind.AnnotateDataBinderInit"?&amp;gt;&lt;br /&gt;&amp;lt;?variable-resolver class="org.zkoss.zkplus.seasar.DelegatingVariableResolver"?&amp;gt;&lt;br /&gt;&amp;lt;window id="win" title="Employee" border="normal" width="300px" apply="MyControler"&amp;gt;&lt;br /&gt;      &amp;lt;listbox id="empListbox" width="200px" rows="10" multiple="true"  height="100%"&lt;br /&gt;        checkmark="true" model="@{controler.empData}" selectedItem="@{selected}"&amp;gt;&lt;br /&gt;        &amp;lt;!--&lt;br /&gt;          controlerはMyControlerのdoAfterComposeメソッドでWindow変数に追加されている。&lt;br /&gt;               aWindow.setVariable("controler", this, true); //aWindowはdoAfterComposeの引数&lt;br /&gt;          empDataはcontrolerで定義されているList&amp;lt;Employee&amp;gt;型のプロパティ&lt;br /&gt;         --&amp;gt;&lt;br /&gt;        &amp;lt;listhead&amp;gt;&lt;br /&gt;            &amp;lt;listheader label="姓" /&amp;gt;&lt;br /&gt;            &amp;lt;listheader label="名" /&amp;gt;&lt;br /&gt;       &amp;lt;/listhead&amp;gt;&lt;br /&gt;        &amp;lt;listitem self="@{each=employee}"&amp;gt;&lt;br /&gt;            &amp;lt;listcell label="@{employee.lastName}"/&amp;gt;&lt;br /&gt;            &amp;lt;listcell label="@{employee.firstName}"/&amp;gt;&lt;br /&gt;        &amp;lt;/listitem&amp;gt;&lt;br /&gt;    &amp;lt;/listbox&amp;gt;&lt;br /&gt;  &amp;lt;vbox&amp;gt;&lt;br /&gt;    &amp;lt;hbox&amp;gt;姓: &amp;lt;label value="@{selected.lastName}"/&amp;gt;&amp;lt;/hbox&amp;gt;&lt;br /&gt;    &amp;lt;hbox&amp;gt;名:&amp;lt;label value="@{selected.firstName}"/&amp;gt;&amp;lt;/hbox&amp;gt;&lt;br /&gt;    &amp;lt;hbox&amp;gt;内線番号: &amp;lt;label value="@{selected.phoneExt}"/&amp;gt;&amp;lt;/hbox&amp;gt;&lt;br /&gt;    &amp;lt;hbox&amp;gt;入社日:&amp;lt;label value="@{selected.hireDate}"/&amp;gt;&amp;lt;/hbox&amp;gt;   &lt;br /&gt;  &amp;lt;/vbox&amp;gt;&lt;br /&gt;&amp;lt;/window&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;コントローラ&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;public class MyControler extends GenericForwardComposer {&lt;br /&gt;    private List&amp;lt;Employee&amp;gt; empData;&lt;br /&gt;    private JdbcManager jdbcManager; //super.doAfterComposeのコール後Seasar変数と自動で紐付けされる&lt;br /&gt; &lt;br /&gt;    @Override&lt;br /&gt;    public void doAfterCompose(Component aWindow) throws Exception {&lt;br /&gt;        super.doAfterCompose(aWindow);&lt;br /&gt;&lt;br /&gt;        // 自分自身をwindowの変数に追加するとビューからアクセス可能なオブジェクトになる。&lt;br /&gt;        aWindow.setVariable("controler", this, true);&lt;br /&gt;        empData = jdbcManager.from(Employee.class).getResultList();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    //zulのListboxのmodelプロパティには controler.empData を設定する&lt;br /&gt;     public List&amp;lt;Employee&amp;gt; getEmpData() {&lt;br /&gt;         return empData;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_OF_auIfbUdk/ST-ACCQ7XMI/AAAAAAAAAGY/yz-8jwmYG9I/s1600-h/mvc2.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 300px; height: 320px;" src="http://1.bp.blogspot.com/_OF_auIfbUdk/ST-ACCQ7XMI/AAAAAAAAAGY/yz-8jwmYG9I/s320/mvc2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5278078060757474498" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8907821310655746853-2154179151699796597?l=kemo-sah-bee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kemo-sah-bee.blogspot.com/feeds/2154179151699796597/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8907821310655746853&amp;postID=2154179151699796597' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/2154179151699796597'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/2154179151699796597'/><link rel='alternate' type='text/html' href='http://kemo-sah-bee.blogspot.com/2008/12/zk-mvc.html' title='ZK: MVC'/><author><name>木茂佐平</name><uri>http://www.blogger.com/profile/01091843968689405775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_OF_auIfbUdk/ST9-rJyPLHI/AAAAAAAAAGQ/aYukJDItceQ/s72-c/mvc1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8907821310655746853.post-4186559179720522030</id><published>2008-12-05T12:43:00.000+09:00</published><updated>2008-12-05T12:44:08.403+09:00</updated><title type='text'>ZK: forEach属性のeach変数の値へコンポーネント生成後にアクセス</title><content type='html'>コンポーネントのeach属性はforEach属性で配列を使用してコンポーネントを表示するときに使われる一時変数なので、あとからonXXXイベント等でこの値にアクセスしたい場合はコンポーネントを表示すると同時にcustom-attributesを使用しeachの値を保存して置く。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;window  width="100%"&amp;gt;  &lt;br /&gt;  &amp;lt;zscript&amp;gt;&lt;br /&gt;    // コンポーネントのforEach属性を利用して生成するボタンの国名ラベルの配列&lt;br /&gt;   String[] countries = {"China", "France", "Germany", "United Kindom", "United States", "Japan"};&lt;br /&gt;  &amp;lt;/zscript&amp;gt;&lt;br /&gt;  &amp;lt;hbox&amp;gt;&lt;br /&gt;    &amp;lt;button label="${each}" forEach="${countries}"&amp;gt;&lt;br /&gt;      &amp;lt;!-- eachの値をcustom-attributesのcountryに保存する --&amp;gt;&lt;br /&gt;     &amp;lt;custom-attributes country="${each}"/&amp;gt;&lt;br /&gt;     &amp;lt;attribute name="onClick"&amp;gt;&lt;br /&gt;       {&lt;br /&gt;       //countryにアクセスする。&lt;br /&gt;       alert(componentScope.get("country"));&lt;br /&gt;       }              &lt;br /&gt;     &amp;lt;/attribute&amp;gt;&lt;br /&gt;    &amp;lt;/button&amp;gt;&lt;br /&gt;  &amp;lt;/hbox&amp;gt;&lt;br /&gt;&amp;lt;/window&amp;gt;  &lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8907821310655746853-4186559179720522030?l=kemo-sah-bee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kemo-sah-bee.blogspot.com/feeds/4186559179720522030/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8907821310655746853&amp;postID=4186559179720522030' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/4186559179720522030'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/4186559179720522030'/><link rel='alternate' type='text/html' href='http://kemo-sah-bee.blogspot.com/2008/12/zk-foreacheach.html' title='ZK: forEach属性のeach変数の値へコンポーネント生成後にアクセス'/><author><name>木茂佐平</name><uri>http://www.blogger.com/profile/01091843968689405775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8907821310655746853.post-40104480713211364</id><published>2008-12-04T12:45:00.002+09:00</published><updated>2008-12-04T12:47:35.727+09:00</updated><title type='text'>ZK: Listitemのフォントサイズを変更する</title><content type='html'>&lt;pre&gt;&lt;br /&gt;&amp;lt;style&amp;gt; &lt;br /&gt;  div.cell-inner{ &lt;br /&gt;  font-size:xx-small;&lt;br /&gt;  //font-size:xx-large;&lt;br /&gt;} &lt;br /&gt;&amp;lt;/style&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8907821310655746853-40104480713211364?l=kemo-sah-bee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kemo-sah-bee.blogspot.com/feeds/40104480713211364/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8907821310655746853&amp;postID=40104480713211364' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/40104480713211364'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/40104480713211364'/><link rel='alternate' type='text/html' href='http://kemo-sah-bee.blogspot.com/2008/12/zk-listitem.html' title='ZK: Listitemのフォントサイズを変更する'/><author><name>木茂佐平</name><uri>http://www.blogger.com/profile/01091843968689405775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8907821310655746853.post-1277237121407935047</id><published>2008-12-04T12:37:00.003+09:00</published><updated>2008-12-04T12:40:42.014+09:00</updated><title type='text'>ZK: 小文字の入力時に自動で大文字に変換するtextbox</title><content type='html'>小文字の入力が入力と同時に大文字に変換される。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;textbox style="text-transform:uppercase" id="idx" /&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8907821310655746853-1277237121407935047?l=kemo-sah-bee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kemo-sah-bee.blogspot.com/feeds/1277237121407935047/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8907821310655746853&amp;postID=1277237121407935047' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/1277237121407935047'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/1277237121407935047'/><link rel='alternate' type='text/html' href='http://kemo-sah-bee.blogspot.com/2008/12/zk-textbox_04.html' title='ZK: 小文字の入力時に自動で大文字に変換するtextbox'/><author><name>木茂佐平</name><uri>http://www.blogger.com/profile/01091843968689405775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8907821310655746853.post-1149252472018692938</id><published>2008-12-03T12:42:00.000+09:00</published><updated>2008-12-03T12:43:26.320+09:00</updated><title type='text'>ZK: Textboxのテキストを選択状態にする</title><content type='html'>&lt;pre&gt;&lt;br /&gt;&amp;lt;window title="Button window" border="normal"&amp;gt;&lt;br /&gt;  &amp;lt;vbox&amp;gt;  &lt;br /&gt;  &amp;lt;button label="Left" width="125px"&amp;gt;  &lt;br /&gt;    &amp;lt;attribute name="onClick"&amp;gt;  &lt;br /&gt;      Messagebox.show("Textboxのテキストを選択状態にします"); &lt;br /&gt;       txt.focus(); &lt;br /&gt;       txt.setSelectionRange(0, txt.getText().length());  &lt;br /&gt;    &amp;lt;/attribute&amp;gt;  &lt;br /&gt;  &amp;lt;/button&amp;gt;  &lt;br /&gt;  &amp;lt;textbox id="txt" value="123456"/&amp;gt;  &lt;br /&gt;  &amp;lt;/vbox&amp;gt;  &lt;br /&gt;&amp;lt;/window&amp;gt;  &lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8907821310655746853-1149252472018692938?l=kemo-sah-bee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kemo-sah-bee.blogspot.com/feeds/1149252472018692938/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8907821310655746853&amp;postID=1149252472018692938' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/1149252472018692938'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/1149252472018692938'/><link rel='alternate' type='text/html' href='http://kemo-sah-bee.blogspot.com/2008/12/zk-textbox.html' title='ZK: Textboxのテキストを選択状態にする'/><author><name>木茂佐平</name><uri>http://www.blogger.com/profile/01091843968689405775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8907821310655746853.post-3227061465852266309</id><published>2008-12-03T12:38:00.002+09:00</published><updated>2008-12-03T12:40:19.682+09:00</updated><title type='text'>ZK: Window幅のリサイズに自動で追随するリストボックス</title><content type='html'>listboxのfixedLayoutプロパティをtrueにするとwindowのリサイズに合わせ列幅を自動調整する。&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;window  title="Window幅のリサイズに自動で追随するリストボックス" &lt;br /&gt;          width="300px"  height="100px" id="win" sizable="true" mode="modal"&amp;gt;&lt;br /&gt;&amp;lt;button label="FILL" onClick="fillList()"/&amp;gt;&lt;br /&gt;&amp;lt;zscript&amp;gt;&lt;br /&gt;public void fillList(){&lt;br /&gt;  Listitem item = new Listitem();&lt;br /&gt;  new Listcell("Cell Data 1").setParent(item);&lt;br /&gt;  new Listcell("Cell Data 2").setParent(item);&lt;br /&gt;  new Listcell("Cell Data 3").setParent(item);&lt;br /&gt;&lt;br /&gt;  item.setParent(lbx);&lt;br /&gt;}&lt;br /&gt;&amp;lt;/zscript&amp;gt;&lt;br /&gt;&amp;lt;listbox width="100%" id="lbx" fixedLayout="true"&amp;gt;&lt;br /&gt;&amp;lt;listhead sizable="true"&amp;gt;&lt;br /&gt;&amp;lt;listheader label="Column 1" /&amp;gt;&lt;br /&gt;&amp;lt;listheader label="Column 2" /&amp;gt;&lt;br /&gt;&amp;lt;listheader label="Column 3" /&amp;gt;&lt;br /&gt;&amp;lt;/listhead&amp;gt;&lt;br /&gt;&amp;lt;/listbox&amp;gt;&lt;br /&gt;&amp;lt;/window&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8907821310655746853-3227061465852266309?l=kemo-sah-bee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kemo-sah-bee.blogspot.com/feeds/3227061465852266309/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8907821310655746853&amp;postID=3227061465852266309' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/3227061465852266309'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/3227061465852266309'/><link rel='alternate' type='text/html' href='http://kemo-sah-bee.blogspot.com/2008/12/window.html' title='ZK: Window幅のリサイズに自動で追随するリストボックス'/><author><name>木茂佐平</name><uri>http://www.blogger.com/profile/01091843968689405775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8907821310655746853.post-3147471116305606397</id><published>2008-12-02T12:21:00.003+09:00</published><updated>2008-12-02T18:10:12.971+09:00</updated><title type='text'>ZK: タイムアウト時間を設定する</title><content type='html'>WEB-INF/zk.xmlでタイムアウト時間を設定することができる。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;zk&amp;gt;&lt;br /&gt; &amp;lt;desktop-config&amp;gt;&lt;br /&gt;   &amp;lt;desktop-timeout&amp;gt;3600&amp;lt;/desktop-timeout&amp;gt; &amp;lt;!--秒単位、マイナスはタイムアウト無し。 --&amp;gt;&lt;br /&gt; &amp;lt;/desktop-config&amp;gt;&lt;br /&gt;&amp;lt;/zk&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8907821310655746853-3147471116305606397?l=kemo-sah-bee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kemo-sah-bee.blogspot.com/feeds/3147471116305606397/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8907821310655746853&amp;postID=3147471116305606397' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/3147471116305606397'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/3147471116305606397'/><link rel='alternate' type='text/html' href='http://kemo-sah-bee.blogspot.com/2008/12/blog-post_02.html' title='ZK: タイムアウト時間を設定する'/><author><name>木茂佐平</name><uri>http://www.blogger.com/profile/01091843968689405775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8907821310655746853.post-5167287432111143998</id><published>2008-12-02T12:17:00.004+09:00</published><updated>2008-12-02T18:09:54.883+09:00</updated><title type='text'>ZK: no empty制約付きのテキストボックスをクリアする</title><content type='html'>no empty制約付きのテキストボックスをクリアするときは&lt;br /&gt;textbox.setRawValue("")を使用すると制約を回避しテキストボックスをクリアできる。&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;window title="no empty制約付きのテキストボックスをクリアする"&lt;br /&gt;              width="300px" height="200px" border="normal"&amp;gt;&lt;br /&gt;&amp;lt;zscript&amp;gt;&amp;lt;![CDATA[&lt;br /&gt; public void save(){&lt;br /&gt;   alert("テキストボックスの値 "+tb1.value+" を保存しました。");&lt;br /&gt;   tb1.setValue("");      //no empty制約にひっかかりクリアできない&lt;br /&gt;   //tb1.setRawValue(""); //制約を回避しクリアできる。&lt;br /&gt; }&lt;br /&gt;]]&amp;gt;&amp;lt;/zscript&amp;gt;&lt;br /&gt; &amp;lt;vbox&amp;gt;&lt;br /&gt;    &amp;lt;textbox id="tb1" constraint="no empty" &amp;gt;&amp;lt;/textbox&amp;gt;&lt;br /&gt;    &amp;lt;button label="保存" onClick="save()" /&amp;gt;&lt;br /&gt; &amp;lt;/vbox&amp;gt;&lt;br /&gt;&amp;lt;/window&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_OF_auIfbUdk/STSo_WtchjI/AAAAAAAAAEg/6Ol_-P3FrNA/s1600-h/clear-noempty.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 168px;" src="http://4.bp.blogspot.com/_OF_auIfbUdk/STSo_WtchjI/AAAAAAAAAEg/6Ol_-P3FrNA/s320/clear-noempty.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5275026869939111474" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8907821310655746853-5167287432111143998?l=kemo-sah-bee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kemo-sah-bee.blogspot.com/feeds/5167287432111143998/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8907821310655746853&amp;postID=5167287432111143998' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/5167287432111143998'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/5167287432111143998'/><link rel='alternate' type='text/html' href='http://kemo-sah-bee.blogspot.com/2008/12/no-empty.html' title='ZK: no empty制約付きのテキストボックスをクリアする'/><author><name>木茂佐平</name><uri>http://www.blogger.com/profile/01091843968689405775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_OF_auIfbUdk/STSo_WtchjI/AAAAAAAAAEg/6Ol_-P3FrNA/s72-c/clear-noempty.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8907821310655746853.post-2351959894467223275</id><published>2008-12-01T13:00:00.001+09:00</published><updated>2008-12-01T13:02:07.956+09:00</updated><title type='text'>ZK: Windowをスクリーントップを越えて移動させない</title><content type='html'>&lt;pre&gt;&lt;br /&gt;&amp;lt;window id="win" border="normal" title="隠れません！！"&lt;br /&gt;  mode="overlapped" width="350px" onMove="resetTop()"&amp;gt;&lt;br /&gt; &amp;lt;zscript&amp;gt;&amp;lt;![CDATA[&lt;br /&gt;   void resetTop(){&lt;br /&gt;     String top = win.getTop();&lt;br /&gt;     if (top != null){&lt;br /&gt;       float winTop = Float.parseFloat((top.substring(0,top.lastIndexOf("px"))));&lt;br /&gt;       if (winTop &amp;lt; 0.0){&lt;br /&gt;         win.setTop(0 + "px");&lt;br /&gt;       }&lt;br /&gt;     }&lt;br /&gt;  }&lt;br /&gt; ]]&amp;gt;&amp;lt;/zscript&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;label value="ウィンドウはスクリーントップを越えて上には移動しません！！"/&amp;gt;&lt;br /&gt;&amp;lt;/window&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8907821310655746853-2351959894467223275?l=kemo-sah-bee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kemo-sah-bee.blogspot.com/feeds/2351959894467223275/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8907821310655746853&amp;postID=2351959894467223275' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/2351959894467223275'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/2351959894467223275'/><link rel='alternate' type='text/html' href='http://kemo-sah-bee.blogspot.com/2008/12/zk-window.html' title='ZK: Windowをスクリーントップを越えて移動させない'/><author><name>木茂佐平</name><uri>http://www.blogger.com/profile/01091843968689405775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8907821310655746853.post-3308783910380200062</id><published>2008-12-01T12:48:00.005+09:00</published><updated>2008-12-01T13:04:01.426+09:00</updated><title type='text'>ZK: 親ウィンドウの中だけ移動するパネル</title><content type='html'>パネルを親ウィンドウの中だけしか移動できないようにするには親ウィンドウでcontentStyle="position:relative;"を指定する。&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;window width="500px" height="200px" title="親ウィンドウ&lt;br /&gt;contentStyle=&amp;quot;position:relative;&amp;quot;" border="normal"&lt;br /&gt;                                      contentStyle="position:relative;" &amp;gt;&lt;br /&gt; &amp;lt;panel id="panel" height="100px" width="300px" title="親ウィンドウの中だけ移動するパネル" &lt;br /&gt;      maximizable="true" border="normal"  collapsible="true" floatable="true" movable="true"&amp;gt;&lt;br /&gt;   &amp;lt;panelchildren&amp;gt;&lt;br /&gt;      最大化しても親ウィンドウの中に収まります。&lt;br /&gt;&lt;br /&gt;   &amp;lt;/panelchildren&amp;gt;&lt;br /&gt; &amp;lt;/panel&amp;gt;&lt;br /&gt;&amp;lt;/window&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_OF_auIfbUdk/STNf5XiFp4I/AAAAAAAAAEY/xg48KMuh30Y/s1600-h/panel-in-parent.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 135px;" src="http://4.bp.blogspot.com/_OF_auIfbUdk/STNf5XiFp4I/AAAAAAAAAEY/xg48KMuh30Y/s320/panel-in-parent.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5274665027755157378" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8907821310655746853-3308783910380200062?l=kemo-sah-bee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kemo-sah-bee.blogspot.com/feeds/3308783910380200062/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8907821310655746853&amp;postID=3308783910380200062' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/3308783910380200062'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/3308783910380200062'/><link rel='alternate' type='text/html' href='http://kemo-sah-bee.blogspot.com/2008/12/blog-post_5308.html' title='ZK: 親ウィンドウの中だけ移動するパネル'/><author><name>木茂佐平</name><uri>http://www.blogger.com/profile/01091843968689405775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_OF_auIfbUdk/STNf5XiFp4I/AAAAAAAAAEY/xg48KMuh30Y/s72-c/panel-in-parent.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8907821310655746853.post-598960519871579439</id><published>2008-12-01T12:45:00.001+09:00</published><updated>2008-12-01T12:58:08.088+09:00</updated><title type='text'>ZK: リストボックスの行の背景色をカスタマイズする</title><content type='html'>&lt;pre&gt;&lt;br /&gt;&amp;lt;style&amp;gt;&lt;br /&gt;/* 偶数行の背景色 */&lt;br /&gt;tr.z-list-item, tr.z-row td.z-row-inner, tr.z-row td.z-group-inner,&lt;br /&gt;tr.z-row td.z-group-foot-inner, tr.z-row {&lt;br /&gt;background: #EEEEEE none repeat scroll 0 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/* 奇数行の背景色 */&lt;br /&gt;tr.odd td.gc, tr.odd, tr.z-listbox-odd, tr.z-grid-odd td.z-row-inner,&lt;br /&gt;tr.z-grid-odd {&lt;br /&gt;background: #FFFFFF none repeat scroll 0 0;&lt;br /&gt;}&lt;br /&gt;/* 選択されていない行の上をマウスが通過する時の背景色 */&lt;br /&gt;tr.overd, td.overd, tr.z-list-item-over {&lt;br /&gt;background: #D3DBFC none repeat scroll 0 0;&lt;br /&gt;}&lt;br /&gt;/* 選択された行の背景色 */&lt;br /&gt;tr.seld, td.seld, tr.z-list-item-seld {&lt;br /&gt;background: #B8BFDC none repeat scroll 0 0;&lt;br /&gt;}&lt;br /&gt;/* 選択された行の上をマウスが通過する時の背景色 */&lt;br /&gt;tr.overseld, td.overseld, tr.z-list-item-over-seld {&lt;br /&gt;background: #D3DBFC none repeat scroll 0 0;&lt;br /&gt;}&lt;br /&gt;&amp;lt;/style&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8907821310655746853-598960519871579439?l=kemo-sah-bee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kemo-sah-bee.blogspot.com/feeds/598960519871579439/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8907821310655746853&amp;postID=598960519871579439' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/598960519871579439'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/598960519871579439'/><link rel='alternate' type='text/html' href='http://kemo-sah-bee.blogspot.com/2008/12/blog-post_01.html' title='ZK: リストボックスの行の背景色をカスタマイズする'/><author><name>木茂佐平</name><uri>http://www.blogger.com/profile/01091843968689405775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8907821310655746853.post-6450848193263529915</id><published>2008-12-01T12:40:00.004+09:00</published><updated>2008-12-01T12:57:45.076+09:00</updated><title type='text'>ZK: リクエスト・パラメータを取得する</title><content type='html'>&lt;pre&gt;&lt;br /&gt;&amp;lt;window  title="リクエスト・パラメータの取得" &lt;br /&gt;         width="250px" height="200px" border="normal"&amp;gt;&lt;br /&gt;  &amp;lt;label value="${param.q}"/&amp;gt;&lt;br /&gt;&amp;lt;/window&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_OF_auIfbUdk/STNdECtbblI/AAAAAAAAAEQ/clDO5PvNWLg/s1600-h/request-param.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 148px;" src="http://1.bp.blogspot.com/_OF_auIfbUdk/STNdECtbblI/AAAAAAAAAEQ/clDO5PvNWLg/s320/request-param.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5274661912609254994" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8907821310655746853-6450848193263529915?l=kemo-sah-bee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kemo-sah-bee.blogspot.com/feeds/6450848193263529915/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8907821310655746853&amp;postID=6450848193263529915' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/6450848193263529915'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/6450848193263529915'/><link rel='alternate' type='text/html' href='http://kemo-sah-bee.blogspot.com/2008/12/blog-post.html' title='ZK: リクエスト・パラメータを取得する'/><author><name>木茂佐平</name><uri>http://www.blogger.com/profile/01091843968689405775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_OF_auIfbUdk/STNdECtbblI/AAAAAAAAAEQ/clDO5PvNWLg/s72-c/request-param.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8907821310655746853.post-4053293326653304132</id><published>2008-12-01T12:29:00.009+09:00</published><updated>2008-12-01T12:57:28.128+09:00</updated><title type='text'>ZK: Borderlayout 折り畳みアイコン表示</title><content type='html'>Boderlayoutの子コンポーネントはcollapsible="true"で折り畳めるようになるが、折り畳みアイコンを表示させるにはtitleを設定しタイトルバーを表示する必要がある。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;borderlayout height="500px"&amp;gt;&lt;br /&gt;&amp;lt;north title="「折り畳みアイコン」を表示するには何かタイトルが必要  →" &lt;br /&gt;  size="20%" splittable="true" collapsible="true"/&amp;gt;&lt;br /&gt;  &amp;lt;east size="20%" splittable="true" collapsible="true"/&amp;gt;&lt;br /&gt;  &amp;lt;center border="normal"/&amp;gt;&lt;br /&gt;  &amp;lt;west title="→" size="20%" splittable="true" collapsible="true"/&amp;gt;&lt;br /&gt;  &amp;lt;south size="30%" border="normal" splittable="true" collapsible="true"/&amp;gt;&lt;br /&gt;&amp;lt;/borderlayout&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_OF_auIfbUdk/STNbFRqo_fI/AAAAAAAAAEI/8ZfgD9YPjik/s1600-h/borderlayout-collapse.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 215px;" src="http://3.bp.blogspot.com/_OF_auIfbUdk/STNbFRqo_fI/AAAAAAAAAEI/8ZfgD9YPjik/s320/borderlayout-collapse.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5274659734780706290" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8907821310655746853-4053293326653304132?l=kemo-sah-bee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kemo-sah-bee.blogspot.com/feeds/4053293326653304132/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8907821310655746853&amp;postID=4053293326653304132' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/4053293326653304132'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/4053293326653304132'/><link rel='alternate' type='text/html' href='http://kemo-sah-bee.blogspot.com/2008/12/borderlayout.html' title='ZK: Borderlayout 折り畳みアイコン表示'/><author><name>木茂佐平</name><uri>http://www.blogger.com/profile/01091843968689405775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_OF_auIfbUdk/STNbFRqo_fI/AAAAAAAAAEI/8ZfgD9YPjik/s72-c/borderlayout-collapse.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8907821310655746853.post-8044394799407034143</id><published>2008-06-21T10:18:00.015+09:00</published><updated>2008-06-21T21:49:08.783+09:00</updated><title type='text'>ZK: Pagingコンポーネントでライブデータ表示</title><content type='html'>Smalltaksの記事&lt;a href="http:///www.zkoss.org/smalltalks/loadondemand/"&gt;Use Load-On-Demand to Handle Huge Data&lt;/a&gt;を試してみました。&lt;br /&gt;リストボックスに一度に大量なデータを表示するとWEBアプリにもサーバにも大きな負担がかかります。&lt;br /&gt;Pagingコンポーネントを明示的に使いオンデマンドでページ単位にクエリーを実行し、取得したライブデータでリストボックスの表示を効果的に処理する方法が紹介されていました。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;window&lt;br /&gt;  title="Listbox with Paging Performance using ZK version: ${desktop.webApp.version}"&lt;br /&gt;  border="normal" use="sample.ui.EmployeeUI"&lt;br /&gt;  xmlns:zk="http://www.zkoss.org/2005/zul"&lt;br /&gt;  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&lt;br /&gt;  xsi:schemaLocation="http://www.zkoss.org/2005/zul http://www.zkoss.org/2005/zul/zul.xsd"&amp;gt;&lt;br /&gt;  &amp;lt;zk:toolbarbutton href="/" label="Back" /&amp;gt;&lt;br /&gt;  &amp;lt;zk:listbox id="listEmployee" width="350px" checkmark="true"&amp;gt;&lt;br /&gt;    &amp;lt;zk:listhead sizable="true"&amp;gt;&lt;br /&gt;      &amp;lt;zk:listheader label="ID" sort="auto" /&amp;gt;&lt;br /&gt;      &amp;lt;zk:listheader label="Full Name" sort="auto" /&amp;gt;&lt;br /&gt;      &amp;lt;zk:listheader label="User Name" sort="auto" /&amp;gt;&lt;br /&gt;    &amp;lt;/zk:listhead&amp;gt;&lt;br /&gt;   &amp;lt;/zk:listbox&amp;gt;&lt;br /&gt;   &amp;lt;!-- 明示的にpagingコンポーネントを使用する。  --&amp;gt;&lt;br /&gt;   &amp;lt;zk:paging id="pageEmployee" pageSize="30" /&amp;gt;&lt;br /&gt;&amp;lt;/window&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Windowを継承したクラスでインターフェースAfterComposeを実装します。&lt;br /&gt;afterComposeメソッドでは&lt;br /&gt;&lt;li&gt;データのトータル行数をセット&lt;br /&gt;&lt;li&gt;最初のページにデータを表示&lt;br /&gt;&lt;li&gt;pagingコンポーネントに onPaging イベントリスナを登録&lt;br /&gt;を行います。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;public class EmployeeUI extends SimpleWindow implements AfterCompose {&lt;br /&gt;  private final String LISTBOX_ID= "listEmployee";  //zulファイルの listbox コンポーネントの id&lt;br /&gt;  private final String PAGING_ID = "pageEmployee";  //zulファイルの paging コンポーネントのid&lt;br /&gt;  private JdbcManager jdbcManager;   //Seasar変数&lt;br /&gt;&lt;br /&gt;  public EmployeeUI(){&lt;br /&gt;      DelegatingVariableResolver variableResolver = new DelegatingVariableResolver();&lt;br /&gt;      jdbcManager = (JdbcManager)variableResolver.resolveVariable("jdbcManager");&lt;br /&gt;  }&lt;br /&gt; &lt;br /&gt;  /**&lt;br /&gt;   *  AfterComposeインターフェースのafterComposeメソッドはコンポーネント作成段階で処理される。&lt;br /&gt;   *  コンポーネントを作成した直後に初期化できパフォーマンスの改善に役立つ。&lt;br /&gt;   *&lt;br /&gt;   */&lt;br /&gt;  public void afterCompose() {&lt;br /&gt;    Paging page = getPaging(PAGING_ID);&lt;br /&gt;&lt;br /&gt;    //データのトータル行数を取得  &lt;br /&gt;    page.setTotalSize((int)jdbcManager.from(Employee.class).getCount());&lt;br /&gt;&lt;br /&gt;    final int PAGE_SIZE = page.getPageSize();&lt;br /&gt;&lt;br /&gt;    // Listboxに最初のページを表示 オフセット--0  行数---PAGE_SIZE&lt;br /&gt;    redraw(0, PAGE_SIZE);&lt;br /&gt;&lt;br /&gt;    // onPagingイベントリスナの登録 決まり文句 &lt;br /&gt;    page.addEventListener("onPaging", new EventListener() {&lt;br /&gt;      public void onEvent(Event event) {&lt;br /&gt;        PagingEvent pageEvent = (PagingEvent) event;&lt;br /&gt;        int pageNo = pageEvent.getActivePage();&lt;br /&gt;        int offset = pageNo * PAGE_SIZE;&lt;br /&gt;&lt;br /&gt;        // クリックされたページ番号でライブデータを取得し再表示&lt;br /&gt;        redraw(offset, PAGE_SIZE);&lt;br /&gt;      }&lt;br /&gt;    });&lt;br /&gt;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  /**&lt;br /&gt;   * afterCompose及びonPagingイベントリスナから呼び出されListboxを描画する。&lt;br /&gt;   * コールされる度にクエリを実行しデータベースからライブデータを取得する。&lt;br /&gt;   *  &lt;br /&gt;   * @param firstResult オフセット&lt;br /&gt;   * @param maxResults  行数&lt;br /&gt;   */&lt;br /&gt;  private void redraw(int firstResult, int maxResults) {&lt;br /&gt;    Listbox listBox = getListbox(LISTBOX_ID);&lt;br /&gt;    listBox.getItems().clear();&lt;br /&gt;  &lt;br /&gt;    // データ取得&lt;br /&gt;    List&amp;lt;Employee&amp;gt; emps = jdbcManager.from(Employee.class)&lt;br /&gt;                            .orderBy("id")  // 問い合わせ結果をページングするにはorder by が必要&lt;br /&gt;                            .offset(firstResult)&lt;br /&gt;                            .limit(maxResults)&lt;br /&gt;                            .getResultList();&lt;br /&gt;    // 表示  &lt;br /&gt;    for (Employee employee : emps) {&lt;br /&gt;      Listitem li = new Listitem();&lt;br /&gt;      li.setValue(employee);  &lt;br /&gt;      li.appendChild(new Listcell("" + employee.id));&lt;br /&gt;      li.appendChild(new Listcell(employee.fullname));&lt;br /&gt;      li.appendChild(new Listcell(employee.username));&lt;br /&gt;      listBox.appendChild(li);&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;大量なデータでも paging コンポーネントを用いライブデータで処理を行うとアプリの動作は非常に軽快ですね。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8907821310655746853-8044394799407034143?l=kemo-sah-bee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kemo-sah-bee.blogspot.com/feeds/8044394799407034143/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8907821310655746853&amp;postID=8044394799407034143' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/8044394799407034143'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/8044394799407034143'/><link rel='alternate' type='text/html' href='http://kemo-sah-bee.blogspot.com/2008/06/zk-paging.html' title='ZK: Pagingコンポーネントでライブデータ表示'/><author><name>木茂佐平</name><uri>http://www.blogger.com/profile/01091843968689405775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8907821310655746853.post-5127126241117375121</id><published>2008-06-01T13:04:00.018+09:00</published><updated>2008-06-02T10:44:11.815+09:00</updated><title type='text'>ZK: Spreadsheet</title><content type='html'>以前から気になっていたZK Spreadsheetをいじってみました。ZK SpreadsheetではあらかじめExcelで作成しておいた表のテンプレートを読み込むことでZKのコンポーネントとして操作可能になるようです。つまり使い慣れたエクセルファイルがそのままZKのコンポーネントになるんですね。&lt;br /&gt;&lt;a href="http://www.blogger.com/post-create.g?blogID=8907821310655746853"&gt;Integrate ZK Spreadsheet with Spring&lt;/a&gt;を元ネタにしてZK SpreadsheetとSeasarの統合を試して見ました。&lt;br /&gt;まずは&lt;a href="https://sourceforge.net/project/downloading.php?group_id=156140&amp;use_mirror=osdn&amp;filename=ZssSpring.war&amp;49516058"&gt;ZssSpring.war&lt;/a&gt;をダウンロードし動作確認。&lt;br /&gt;&lt;br /&gt;次にデモと同じ表示をさせるようにテーブルを作成。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;create table FinancialData (&lt;br /&gt;  fyear integer,&lt;br /&gt;  fquarter integer,&lt;br /&gt;  item char(10),&lt;br /&gt;&lt;br /&gt;  liquidAssets decimal(10, 0),&lt;br /&gt;  fundInvestment decimal(10, 0),&lt;br /&gt;  fixedAssets decimal(10, 0),&lt;br /&gt;  intangibleAsset decimal(10, 0),&lt;br /&gt;  otherAssets decimal(10, 0),&lt;br /&gt;&lt;br /&gt;  currentLiabilities decimal(10, 0),&lt;br /&gt;  longTermLiabilities decimal(10, 0),&lt;br /&gt;  otherLiabilities decimal(10, 0),&lt;br /&gt;&lt;br /&gt;  capitalStock decimal(10, 0),&lt;br /&gt;  capitalSurplus decimal(10, 0),&lt;br /&gt;  retainedEarnings decimal(10, 0),&lt;br /&gt;  otherEquity decimal(10, 0),&lt;br /&gt;  treasuryStock decimal(10, 0)&lt;br /&gt;&lt;br /&gt;);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;insert into FinancialData(&lt;br /&gt;  fyear,&lt;br /&gt;  fquarter,&lt;br /&gt;  item,&lt;br /&gt;&lt;br /&gt;  liquidAssets,&lt;br /&gt;  fundInvestment,&lt;br /&gt;  fixedAssets,&lt;br /&gt;  intangibleAsset,&lt;br /&gt;  otherAssets,&lt;br /&gt;&lt;br /&gt;  currentLiabilities,&lt;br /&gt;  longTermLiabilities,&lt;br /&gt;  otherLiabilities,&lt;br /&gt;&lt;br /&gt;  capitalStock,&lt;br /&gt;  capitalSurplus,&lt;br /&gt;  retainedEarnings,&lt;br /&gt;  otherEquity,&lt;br /&gt;  treasuryStock&lt;br /&gt;)values(&lt;br /&gt;2007,&lt;br /&gt;1,&lt;br /&gt;'Quarter',&lt;br /&gt;146504221,&lt;br /&gt;23181709,&lt;br /&gt;7168392,&lt;br /&gt;221426,&lt;br /&gt;2270018,&lt;br /&gt;&lt;br /&gt;102515784,&lt;br /&gt;3000,&lt;br /&gt;456175,&lt;br /&gt;&lt;br /&gt;33630080,&lt;br /&gt;7127901,&lt;br /&gt;34420905,&lt;br /&gt;1826731,&lt;br /&gt;-634810&lt;br /&gt;);&lt;br /&gt;...&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Bean作成&lt;br /&gt;キャメルケースでテーブルを作るとBeanの作成時にテーブル名と列名を一々指定しなければ&lt;br /&gt;ならなかった(^^;;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;package churazk.entity;&lt;br /&gt;import java.math.BigDecimal;&lt;br /&gt;import javax.persistence.Column;&lt;br /&gt;import javax.persistence.Entity;&lt;br /&gt;import javax.persistence.Table;&lt;br /&gt;&lt;br /&gt;@Entity&lt;br /&gt;@Table(name="FINANCIALDATA")&lt;br /&gt;public class FinancialData {&lt;br /&gt; @Column(name="fYear")&lt;br /&gt; public Integer fYear;&lt;br /&gt; &lt;br /&gt; @Column(name="fQuarter") &lt;br /&gt; public Integer fQuarter;&lt;br /&gt;&lt;br /&gt; @Column(name="item")&lt;br /&gt; public String item;&lt;br /&gt;&lt;br /&gt; @Column(name="liquidAssets")&lt;br /&gt; public BigDecimal liquidAssets;&lt;br /&gt;&lt;br /&gt; @Column(name="fundInvestment")&lt;br /&gt; public BigDecimal fundInvestment;&lt;br /&gt; &lt;br /&gt; @Column(name="fixedAssets")&lt;br /&gt; public BigDecimal fixedAssets;&lt;br /&gt;&lt;br /&gt; @Column(name="intangibleAsset")  &lt;br /&gt; public BigDecimal intangibleAsset;&lt;br /&gt;   &lt;br /&gt; @Column(name="otherAssets")&lt;br /&gt; public BigDecimal otherAssets;&lt;br /&gt;&lt;br /&gt; @Column(name="currentLiabilities")  &lt;br /&gt; public BigDecimal currentLiabilities;&lt;br /&gt;   &lt;br /&gt; @Column(name="longTermLiabilities")&lt;br /&gt; public BigDecimal longTermLiabilities;&lt;br /&gt;   &lt;br /&gt; @Column(name="otherLiabilities")&lt;br /&gt; public BigDecimal otherLiabilities;&lt;br /&gt;&lt;br /&gt; @Column(name="capitalStock")  &lt;br /&gt; public BigDecimal capitalStock;&lt;br /&gt;   &lt;br /&gt; @Column(name="capitalSurplus")&lt;br /&gt; public BigDecimal capitalSurplus;&lt;br /&gt;   &lt;br /&gt; @Column(name="retainedEarnings")&lt;br /&gt; public BigDecimal retainedEarnings;&lt;br /&gt;   &lt;br /&gt; @Column(name="otherEquity")&lt;br /&gt; public BigDecimal otherEquity;&lt;br /&gt;   &lt;br /&gt; @Column(name="treasuryStock")&lt;br /&gt; public BigDecimal treasuryStock; &lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;つづいてzulファイルを編集。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br /&gt;&amp;lt;?variable-resolver class="org.zkoss.zkplus.seasar.DelegatingVariableResolver"?&amp;gt;&lt;br /&gt;&amp;lt;window&amp;gt;&lt;br /&gt;Quarter:&lt;br /&gt;  &amp;lt;listbox id="quarter" mold="select" rows="1" onSelect="refreshQuarter()"&amp;gt;&lt;br /&gt;   &amp;lt;listitem value="0" label="Select"/&amp;gt;&lt;br /&gt;   &amp;lt;listitem value="1" label="Quarter 1"/&amp;gt;&lt;br /&gt;   &amp;lt;listitem value="2" label="Quarter 2"/&amp;gt;&lt;br /&gt;   &amp;lt;listitem value="3" label="Quarter 3"/&amp;gt;&lt;br /&gt;   &amp;lt;listitem value="4" label="Quarter 4"/&amp;gt;&lt;br /&gt;  &amp;lt;/listbox&amp;gt;&lt;br /&gt;Style:&lt;br /&gt;  &amp;lt;listbox id="style" mold="select" rows="1" onSelect="changeStyle()"&amp;gt;&lt;br /&gt;   &amp;lt;listitem label="Style 1" value="/BalanceSheet.xls"/&amp;gt;&lt;br /&gt;   &amp;lt;listitem label="Style 2" value="/NewSheet.xls"/&amp;gt;&lt;br /&gt;  &amp;lt;/listbox&amp;gt;&lt;br /&gt;&amp;lt;zscript&amp;gt;&lt;br /&gt; import churazk.entity.FinancialData;&lt;br /&gt; import org.seasar.extension.jdbc.where.SimpleWhere;&lt;br /&gt; &lt;br /&gt;  FinancialData reloadQuarter(int quarter){&lt;br /&gt;     FinancialData bean = jdbcManager.from(FinancialData.class)&lt;br /&gt;                        .where(new SimpleWhere()&lt;br /&gt;                                .eq("fYear", 2007)&lt;br /&gt;                                .eq("fQuarter", quarter)&lt;br /&gt;                         )&lt;br /&gt;                        .getSingleResult();&lt;br /&gt; &lt;br /&gt;     return bean;&lt;br /&gt;  }&lt;br /&gt; &lt;br /&gt;  void refreshQuarter() {&lt;br /&gt;     Listitem listitem = quarter.getSelectedItem();&lt;br /&gt;     int quarter = Integer.parseInt(listitem.value);&lt;br /&gt;     //Call the method to reload data&lt;br /&gt;     dataBean = reloadQuarter(quarter);&lt;br /&gt;     //Call the method to refresh values of cells&lt;br /&gt;     balance.book.notifyChange(new String[]{"dataBean"});&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; void changeStyle() {  //Change the URL of spreadsheet&lt;br /&gt;    balance.url = style.getSelectedItem().value;&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; dataBean = reloadQuarter(0);&lt;br /&gt;&amp;lt;/zscript&amp;gt;&lt;br /&gt; &amp;lt;spreadsheet id="balance" url="/BalanceSheet.xls" maxrow="40" maxcolumn="20" height="600px" width="1300px"/&amp;gt; &lt;br /&gt;&amp;lt;/window&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;スプレッドシートデモのWEB-INF/libより次のファイルをプロジェクトWEB-INF/libへインポート&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;commons-math-1.2.jar&lt;br /&gt;jxl.jar&lt;br /&gt;zss.jar&lt;br /&gt;zssex.jar&lt;br /&gt;zssjxl.jar&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;プロジェクトのWEBルートにBalanceSheet.xlsとNewSheet.xlsを配置して実行&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_OF_auIfbUdk/SEJAVI6h5II/AAAAAAAAADw/vssrJt53GyM/s1600-h/sheet.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_OF_auIfbUdk/SEJAVI6h5II/AAAAAAAAADw/vssrJt53GyM/s320/sheet.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5206794851108119682" /&gt;&lt;/a&gt;&lt;br /&gt;ZKコンポーネントとは言えExcelシートにビーンの値が表示され不思議な感じです、でもとても使い勝手がよさそうなコンポーネントです。&lt;br /&gt;&lt;br /&gt;動作環境&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;li&gt;OS: Ubuntu 8.04&lt;br /&gt;&lt;li&gt;JDK: 1.6.0_04&lt;br /&gt;&lt;li&gt;Tomcat: apache-tomcat-6.0.16 &lt;br /&gt;&lt;li&gt;Eclipse: Europa wtp-all-in-one-sdk&lt;br /&gt;&lt;li&gt;ZK: zk-3.0.5&lt;br /&gt;&lt;li&gt;Seasar: DoltengプラグインよりChuraプロジェクト(Teeda+S2Dao)として&lt;br /&gt;&lt;li&gt;S2JDBC関連: sa-struts-tutorial-1.0.2-rc4.zipより&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;       geronimo-jpa_3.0_spec-1.0.jar&lt;br /&gt;       geronimo-ejb_3.0_spec-1.0.jar&lt;br /&gt;       s2jdbc.dicon&lt;br /&gt;&lt;/pre&gt; &lt;br /&gt;&lt;li&gt; web.xml追加&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;!-- ZK --&amp;gt;&lt;br /&gt;  &amp;lt;listener&amp;gt;&lt;br /&gt;    &amp;lt;listener-class&amp;gt;org.zkoss.zk.ui.http.HttpSessionListener&amp;lt;/listener-class&amp;gt;&lt;br /&gt;  &amp;lt;/listener&amp;gt;&lt;br /&gt;  &amp;lt;servlet&amp;gt;&lt;br /&gt;     &amp;lt;servlet-name&amp;gt;zkLoader&amp;lt;/servlet-name&amp;gt;&lt;br /&gt;     &amp;lt;servlet-class&amp;gt;org.zkoss.zk.ui.http.DHtmlLayoutServlet&amp;lt;/servlet-class&amp;gt;&lt;br /&gt;     &amp;lt;init-param&amp;gt;&lt;br /&gt;        &amp;lt;param-name&amp;gt;update-uri&amp;lt;/param-name&amp;gt;&lt;br /&gt;        &amp;lt;param-value&amp;gt;/zkau&amp;lt;/param-value&amp;gt;&lt;br /&gt;     &amp;lt;/init-param&amp;gt;&lt;br /&gt;     &amp;lt;load-on-startup&amp;gt;1&amp;lt;/load-on-startup&amp;gt;&amp;lt;!-- Must --&amp;gt;&lt;br /&gt;  &amp;lt;/servlet&amp;gt;&lt;br /&gt;  &amp;lt;servlet-mapping&amp;gt;&lt;br /&gt;     &amp;lt;servlet-name&amp;gt;zkLoader&amp;lt;/servlet-name&amp;gt;&lt;br /&gt;     &amp;lt;url-pattern&amp;gt;*.zul&amp;lt;/url-pattern&amp;gt;&lt;br /&gt;  &amp;lt;/servlet-mapping&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;servlet&amp;gt;&lt;br /&gt;     &amp;lt;servlet-name&amp;gt;auEngine&amp;lt;/servlet-name&amp;gt;&lt;br /&gt;     &amp;lt;servlet-class&amp;gt;org.zkoss.zk.au.http.DHtmlUpdateServlet&amp;lt;/servlet-class&amp;gt;&lt;br /&gt;  &amp;lt;/servlet&amp;gt;&lt;br /&gt;  &amp;lt;servlet-mapping&amp;gt;&lt;br /&gt;     &amp;lt;servlet-name&amp;gt;auEngine&amp;lt;/servlet-name&amp;gt;&lt;br /&gt;     &amp;lt;url-pattern&amp;gt;/zkau/*&amp;lt;/url-pattern&amp;gt;&lt;br /&gt;  &amp;lt;/servlet-mapping&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;!-- Miscellaneous --&amp;gt;&lt;br /&gt;  &amp;lt;session-config&amp;gt;&lt;br /&gt;     &amp;lt;session-timeout&amp;gt;120&amp;lt;/session-timeout&amp;gt;&lt;br /&gt;  &amp;lt;/session-config&amp;gt;&lt;br /&gt;&amp;lt;!-- ZK --&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8907821310655746853-5127126241117375121?l=kemo-sah-bee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kemo-sah-bee.blogspot.com/feeds/5127126241117375121/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8907821310655746853&amp;postID=5127126241117375121' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/5127126241117375121'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/5127126241117375121'/><link rel='alternate' type='text/html' href='http://kemo-sah-bee.blogspot.com/2008/06/zk-spreadsheet.html' title='ZK: Spreadsheet'/><author><name>木茂佐平</name><uri>http://www.blogger.com/profile/01091843968689405775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_OF_auIfbUdk/SEJAVI6h5II/AAAAAAAAADw/vssrJt53GyM/s72-c/sheet.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8907821310655746853.post-664377968128582633</id><published>2008-03-11T13:30:00.017+09:00</published><updated>2008-03-14T11:48:23.091+09:00</updated><title type='text'>ZK: jdbcManager Seasar変数(3)</title><content type='html'>jdbcManagerを使いながらデザインとロジックを分離したいときは&lt;br /&gt;こんな感じでいけそうです。&lt;br /&gt;&lt;br /&gt;listboxのモデルにEmpWindowのプロパティemps、selectedItemにselectedをセットします。&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;...&lt;br /&gt;&amp;lt;window id="win" title="Emplyee list" use="zkseasar.view.EmpWindow"&amp;gt;&lt;br /&gt;&amp;lt;listbox id="lb" model="@{win.emps}" selectedItem="@{win.selected}"&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;EmpWindow.java&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;public class EmpWindow extends Window {&lt;br /&gt;  private JdbcManager jdbcManager;&lt;br /&gt;  private List&amp;lt;Emp&amp;gt; emps;&lt;br /&gt;  private Emp selected;&lt;br /&gt;&lt;br /&gt;  public EmpWindow(){&lt;br /&gt;      DelegatingVariableResolver variableResolver = new DelegatingVariableResolver();&lt;br /&gt;      jdbcManager = (JdbcManager)variableResolver.resolveVariable("jdbcManager");&lt;br /&gt;&lt;br /&gt;      emps = jdbcManager.from(Emp.class)&lt;br /&gt;                        .where("sal between ? and ?", 2000, 3000)&lt;br /&gt;                        .orderBy("sal").getResultList();&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public List&amp;lt;Emp&amp;gt; getEmps(){&lt;br /&gt;     return emps;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public void setSelected(Emp emp){&lt;br /&gt;      selected = emp;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public Emp getSelected(){&lt;br /&gt;      return selected;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; /*&lt;br /&gt; * listboxにempを追加する&lt;br /&gt; * http://sourceforge.net/forum/message.php?msg_id=4752395&lt;br /&gt; */&lt;br /&gt;  public void addEmp(Emp emp){&lt;br /&gt;     Listbox lb = ((Listbox) getFellow("lb"));&lt;br /&gt;      ((ListModelList) lb.getModel()).add(emp);&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;ZKをSeasarと組み合わせるとデータベースアクセスはjdbcManagerの使いかただけ知っていればいいみたいですね。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8907821310655746853-664377968128582633?l=kemo-sah-bee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kemo-sah-bee.blogspot.com/feeds/664377968128582633/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8907821310655746853&amp;postID=664377968128582633' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/664377968128582633'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/664377968128582633'/><link rel='alternate' type='text/html' href='http://kemo-sah-bee.blogspot.com/2008/03/zk-jdbcmanager-seasar3.html' title='ZK: jdbcManager Seasar変数(3)'/><author><name>木茂佐平</name><uri>http://www.blogger.com/profile/01091843968689405775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8907821310655746853.post-4749210226621592278</id><published>2008-03-11T13:21:00.004+09:00</published><updated>2008-03-11T22:14:07.818+09:00</updated><title type='text'>ZK: jdbcManager Seasar変数(2)</title><content type='html'>可変長引数を持つメソッドはzscriptでは使用できないようです。&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;zscript&amp;gt;&lt;br /&gt;  import zkseasar.entity.Emp;&lt;br /&gt;  emps = jdbcManager.from(Emp.class)&lt;br /&gt;                     .where("sal &amp;gt;= ?", 2000)&lt;br /&gt;                     .orderBy("sal")&lt;br /&gt;                     .getResultList();&lt;br /&gt;&amp;lt;/zscript&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;上記のスクリプトを実行すると次のエラーメッセージを吐いてしまいます。&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt; 致命的: サーブレット zkLoader のServlet.service()が例外を投げました&lt;br /&gt;org.zkoss.zk.ui.UiException: Sourced file: inline evaluation of: ``import zkseasar.entity.Emp;   &lt;br /&gt;emps = jdbcManager.from(Emp.class)              . . . '' :&lt;br /&gt;Error in method invocation: Method where( java.lang.String, int ) not found in class'org.seasar.extension.jdbc.query.AutoSelectImpl' :&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;検索条件を指定するときはSQL文字列ではなくSimpleWhereが使えます。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;zscript &amp;gt;&lt;br /&gt;  import zkseasar.entity.Emp;&lt;br /&gt;  import org.seasar.extension.jdbc.where.SimpleWhere;&lt;br /&gt;  emps = jdbcManager.from(Emp.class)&lt;br /&gt;                        .where(new SimpleWhere()&lt;br /&gt;                                .ge("sal", 2000)&lt;br /&gt;                         )&lt;br /&gt;                        .orderBy("sal")&lt;br /&gt;                        .getResultList();&lt;br /&gt;&amp;lt;/zscript&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Rubyからは可変長引数を持つJavaメソッドでも呼び出せるか試してみました。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;zscript language="ruby"&amp;gt;&lt;br /&gt;   import 'zkseasar.entity.Emp'&lt;br /&gt;    emps = $jdbcManager.from(Java::ZkseasarEntity::Emp:Class).&lt;br /&gt;                     where("sal &amp;gt;= ?", 2000).&lt;br /&gt;                     orderBy("sal").&lt;br /&gt;                     getResultList()&lt;br /&gt;    &lt;br /&gt;   emps.each{|emp| print emp.deptId, "\t", emp.empName, "\t", emp.sal, "\n"}&lt;br /&gt;&amp;lt;/zscript&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;やはりダメですね。&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;致命的: サーブレット zkLoader のServlet.service()が例外を投げました&lt;br /&gt;:1: no where with arguments matching [class java.lang.String, class java.lang.Long]&lt;br /&gt;   on object JavaUtilities (NameError)&lt;br /&gt;    ...internal jruby stack elided...&lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8907821310655746853-4749210226621592278?l=kemo-sah-bee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kemo-sah-bee.blogspot.com/feeds/4749210226621592278/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8907821310655746853&amp;postID=4749210226621592278' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/4749210226621592278'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/4749210226621592278'/><link rel='alternate' type='text/html' href='http://kemo-sah-bee.blogspot.com/2008/03/zk-jdbcmanager-seasar2.html' title='ZK: jdbcManager Seasar変数(2)'/><author><name>木茂佐平</name><uri>http://www.blogger.com/profile/01091843968689405775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8907821310655746853.post-2340437969512975825</id><published>2008-03-11T13:06:00.008+09:00</published><updated>2008-03-11T21:43:38.885+09:00</updated><title type='text'>ZK: jdbcManager Seasar変数</title><content type='html'>DelegatingVariableResolverでZKから直接jdbcManagerが使えるんですね。&lt;br /&gt;&lt;br /&gt;emp.zul&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br /&gt;&amp;lt;?init class="org.zkoss.zkplus.databind.AnnotateDataBinderInit" ?&amp;gt;&lt;br /&gt;&amp;lt;?variable-resolver class="org.zkoss.zkplus.seasar.DelegatingVariableResolver"?&amp;gt;&lt;br /&gt;&amp;lt;zk xmlns="http://www.zkoss.org/2005/zul" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.zkoss.org/2005/zul http://www.zkoss.org/2005/zul/zul.xsd "&amp;gt;&lt;br /&gt;&amp;lt;zscript &amp;gt;&lt;br /&gt; import zkseasar.entity.Emp;&lt;br /&gt; emps = jdbcManager.from(Emp.class)&lt;br /&gt;                   .orderBy("sal")&lt;br /&gt;                   .getResultList();&lt;br /&gt;&amp;lt;/zscript&amp;gt;&lt;br /&gt;&amp;lt;window title="Emplyee list" &amp;gt;&lt;br /&gt; &amp;lt;listbox model="@{emps}"&amp;gt;&lt;br /&gt;     &amp;lt;listhead&amp;gt;       &lt;br /&gt;       &amp;lt;listheader label="id"/&amp;gt;&lt;br /&gt;       &amp;lt;listheader label="Emp no"/&amp;gt;&lt;br /&gt;       &amp;lt;listheader label="Emp name"/&amp;gt;&lt;br /&gt;       &amp;lt;listheader label="Hiredate"/&amp;gt;&lt;br /&gt;       &amp;lt;listheader label="Sal"/&amp;gt;&lt;br /&gt;       &amp;lt;listheader label="Dept id"/&amp;gt;&lt;br /&gt;       &amp;lt;listheader label="Version no"/&amp;gt;&lt;br /&gt;   &amp;lt;/listhead&amp;gt;   &lt;br /&gt;   &amp;lt;listitem self="@{each=emp}"&amp;gt;&lt;br /&gt;     &amp;lt;listcell label="@{emp.id}"/&amp;gt;&lt;br /&gt;     &amp;lt;listcell label="@{emp.empNo}"/&amp;gt;     &lt;br /&gt;     &amp;lt;listcell label="@{emp.empName}"/&amp;gt;&lt;br /&gt;     &amp;lt;listcell label="@{emp.hiredate}"/&amp;gt;&lt;br /&gt;     &amp;lt;listcell label="@{emp.sal}"/&amp;gt;&lt;br /&gt;     &amp;lt;listcell label="@{emp.deptId}"/&amp;gt;&lt;br /&gt;     &amp;lt;listcell label="@{emp.versionNo}"/&amp;gt;                 &lt;br /&gt;   &amp;lt;/listitem&amp;gt;&lt;br /&gt; &amp;lt;/listbox&amp;gt;&lt;br /&gt;&amp;lt;/window&amp;gt;&lt;br /&gt;&amp;lt;/zk&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;これは楽ちん！！&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;java.util.Date および java.util.Calendar 型のプロパティには時制を指定する必要があるそうです。&lt;br /&gt;EmpクラスのhiredateプロパティはDate型なので@Temporalを使い時制にTemporalType.DATEを指定します。&lt;br /&gt;&lt;br /&gt;Emp.java&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;public class Emp {&lt;br /&gt;..&lt;br /&gt; @Temporal(TemporalType.DATE)&lt;br /&gt; @Column(name = "HIREDATE")&lt;br /&gt; public Date hiredate;&lt;br /&gt;..&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8907821310655746853-2340437969512975825?l=kemo-sah-bee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kemo-sah-bee.blogspot.com/feeds/2340437969512975825/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8907821310655746853&amp;postID=2340437969512975825' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/2340437969512975825'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/2340437969512975825'/><link rel='alternate' type='text/html' href='http://kemo-sah-bee.blogspot.com/2008/03/zk-jdbcmanager-seasar.html' title='ZK: jdbcManager Seasar変数'/><author><name>木茂佐平</name><uri>http://www.blogger.com/profile/01091843968689405775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8907821310655746853.post-1555546224282083409</id><published>2007-12-24T10:42:00.000+09:00</published><updated>2008-01-11T10:06:00.767+09:00</updated><title type='text'>ZK: データバインディング</title><content type='html'>selectRainfallAvgメソッドを実行し作成したListをZKのListboxコンポーネントにデータバインドします。&lt;br /&gt;まず&amp;lt;?init class="org.zkoss.zkplus.databind.AnnotateDataBinderInit" ?&amp;gt;でデータバインダーを初期化します。&lt;br /&gt;Seasarコンポーネントを生成後selectRainfallAvgメソッドを実行しrainfallAvgを作成します。&lt;br /&gt;model="@{rainfallAvg}"でZKのListboxとJavaのListを関連付けるとロード時にデータバインダーによってJavaのListからZKのListModelに変換されます。&lt;br /&gt;selectedItem="@{selected}"は選択された行に対応したビーンに関連付けられた変数selectedを準備します。選択された行を明細表示するのに変数selectedのプロパティが利用出来ます。&lt;br /&gt;self="@{each=rainfall}"はListの各行に対応したビーンをrainfallと言う名前で関連付けます。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br /&gt;&amp;lt;?init class="org.zkoss.zkplus.databind.AnnotateDataBinderInit" ?&amp;gt;&lt;br /&gt;&amp;lt;zk xmlns="http://www.zkoss.org/2005/zul" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:schemaLocation="http://www.zkoss.org/2005/zul/zul.xsd "&amp;gt;&lt;br /&gt;&amp;lt;window title="東京 年間降雨量デモ" width="500px" border="normal"&amp;gt;&lt;br /&gt;&amp;lt;zscript&amp;gt;&lt;br /&gt;  import org.seasar.framework.container.SingletonS2Container;&lt;br /&gt;  rainStatsService = SingletonS2Container.getComponent("rainStatsService");&lt;br /&gt;  rainfallAvg = rainStatsService.selectRainfallAvg();&lt;br /&gt;&amp;lt;/zscript&amp;gt;&lt;br /&gt;  &amp;lt;listbox model="@{rainfallAvg}" id="rainfallListbox" rows="5" selectedItem="@{selected}"&amp;gt;&lt;br /&gt;     &amp;lt;listhead&amp;gt;    &lt;br /&gt;      &amp;lt;listheader label="年度"/&amp;gt;        &lt;br /&gt;      &amp;lt;listheader label="平均降雨量(mm)"/&amp;gt;&lt;br /&gt;    &amp;lt;/listhead&amp;gt;    &lt;br /&gt;    &amp;lt;listitem self="@{each=rainfall}"&amp;gt;&lt;br /&gt;      &amp;lt;listcell label="@{rainfall.year}"/&amp;gt;&lt;br /&gt;      &amp;lt;listcell label="@{rainfall.average}"/&amp;gt;&lt;br /&gt;    &amp;lt;/listitem&amp;gt;&lt;br /&gt;  &amp;lt;/listbox&amp;gt;&lt;br /&gt;  &amp;lt;vbox&amp;gt;&lt;br /&gt;    &amp;lt;hbox&amp;gt;年度: &amp;lt;label value="@{selected.year}"/&amp;gt;&amp;lt;/hbox&amp;gt;&lt;br /&gt;    &amp;lt;hbox&amp;gt;平均降雨量:&amp;lt;label value="@{selected.average}"/&amp;gt;&amp;lt;/hbox&amp;gt;&lt;br /&gt;  &amp;lt;/vbox&amp;gt;&lt;br /&gt;&amp;lt;/window&amp;gt;&lt;br /&gt;&amp;lt;/zk&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_OF_auIfbUdk/R4XfAeMIkuI/AAAAAAAAADo/BajbYEn7pDw/s1600-h/databind.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_OF_auIfbUdk/R4XfAeMIkuI/AAAAAAAAADo/BajbYEn7pDw/s320/databind.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5153770547792351970" /&gt;&lt;/a&gt;&lt;br /&gt;次のメソッドを実行するとデータベースからリロードすることができます。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;void refreshRainfallListbox(){&lt;br /&gt;  List list = rainfallListbox.getModel();&lt;br /&gt;  list.clear();&lt;br /&gt;   list.addAll(rainStatsService.selectRainfallAvg());&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8907821310655746853-1555546224282083409?l=kemo-sah-bee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kemo-sah-bee.blogspot.com/feeds/1555546224282083409/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8907821310655746853&amp;postID=1555546224282083409' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/1555546224282083409'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/1555546224282083409'/><link rel='alternate' type='text/html' href='http://kemo-sah-bee.blogspot.com/2007/12/zk_24.html' title='ZK: データバインディング'/><author><name>木茂佐平</name><uri>http://www.blogger.com/profile/01091843968689405775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_OF_auIfbUdk/R4XfAeMIkuI/AAAAAAAAADo/BajbYEn7pDw/s72-c/databind.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8907821310655746853.post-7457103410141847369</id><published>2007-12-23T11:50:00.000+09:00</published><updated>2007-12-23T13:22:53.757+09:00</updated><title type='text'>Seasar: S2JDBC 外出しSQL</title><content type='html'>&lt;a href="http://kemo-sah-bee.blogspot.com/2007/11/zk-seasar-jfreechart.html"&gt;ZK + Seasar:JFreeChart&lt;/a&gt;で使った降雨量の年間平均をS2JDBCの外出しSQLで求めてみました。&lt;br /&gt;&lt;br /&gt;&lt;li&gt;年と平均降雨量を格納するDTOを作成します。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;package zkseasar.dto;&lt;br /&gt;&lt;br /&gt;public class RainfallAvgDto {&lt;br /&gt;    public Integer year;&lt;br /&gt;    public Double average;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;li&gt;RainStatsServiceに年間平均降雨量を取り出すメソッドを追加します。&lt;br /&gt;DTOのプロパティ名とSQLのカラム名を統一するだけでSQLを実行した結果がDTOへ自動的にマッピングされるようです。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;...&lt;br /&gt;public List&lt;RainfallAvgDto&gt; selectRainfallAvg(){&lt;br /&gt;    return jdbcManager.selectBySql(RainfallAvgDto.class, &lt;br /&gt;             " select year, avg(rainfall) as average" +&lt;br /&gt;             " from rain_stats " +&lt;br /&gt;             " group by year " +&lt;br /&gt;             " order by year ")&lt;br /&gt;           .getResultList();&lt;br /&gt;}&lt;br /&gt;...&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;S2TestCaseを継承したクラスを作り動作確認します。&lt;br /&gt;EclipseのメニューからRun&gt;Debug As&gt;JUnit Testで実行できます。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;public class RainStatsServiceTest extends S2TestCase {&lt;br /&gt;    private JdbcManager jdbcManager;&lt;br /&gt;&lt;br /&gt;    protected void setUp() throws Exception {&lt;br /&gt;        include("app.dicon");&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void testSelectRainfallAvg() throws Exception {&lt;br /&gt;     RainStatsService  rainStatsService =  &lt;br /&gt;         SingletonS2Container.getComponent("rainStatsService");&lt;br /&gt;   &lt;br /&gt;     List&lt;RainfallAvgDto&gt; results = &lt;br /&gt;       rainStatsService.selectRainfallAvg();   &lt;br /&gt;     for (RainfallAvgDto dto : results) {&lt;br /&gt;         System.out.println(dto.year + ":"+ dto.average);&lt;br /&gt;     }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8907821310655746853-7457103410141847369?l=kemo-sah-bee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kemo-sah-bee.blogspot.com/feeds/7457103410141847369/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8907821310655746853&amp;postID=7457103410141847369' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/7457103410141847369'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/7457103410141847369'/><link rel='alternate' type='text/html' href='http://kemo-sah-bee.blogspot.com/2007/12/seasar-s2jdbc-sql.html' title='Seasar: S2JDBC 外出しSQL'/><author><name>木茂佐平</name><uri>http://www.blogger.com/profile/01091843968689405775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8907821310655746853.post-7275356589162247771</id><published>2007-12-19T10:06:00.000+09:00</published><updated>2007-12-23T11:48:44.616+09:00</updated><title type='text'>ZK: ウィンドウをブラウザの中央に表示</title><content type='html'>windowをブラウザの中央に表示したい時はvboxの中にwindowを配置する。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;zk&amp;gt; &lt;br /&gt;&amp;lt;vbox height="100%" width="100%" pack="center" align="center"&amp;gt; &lt;br /&gt;&amp;lt;window title="Login" border="normal" &lt;br /&gt;        style="text-align: center;left-margin: 30%;right-margin: 30%; width:30%;"&amp;gt;&lt;br /&gt;Login Window&lt;br /&gt;&amp;lt;/window&amp;gt;&lt;br /&gt;&amp;lt;/vbox&amp;gt; &lt;br /&gt;&amp;lt;/zk&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_OF_auIfbUdk/R23McOMIktI/AAAAAAAAADg/fAFeiIelda0/s1600-h/wndpos.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_OF_auIfbUdk/R23McOMIktI/AAAAAAAAADg/fAFeiIelda0/s320/wndpos.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5146994734371738322" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8907821310655746853-7275356589162247771?l=kemo-sah-bee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kemo-sah-bee.blogspot.com/feeds/7275356589162247771/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8907821310655746853&amp;postID=7275356589162247771' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/7275356589162247771'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/7275356589162247771'/><link rel='alternate' type='text/html' href='http://kemo-sah-bee.blogspot.com/2007/12/zk.html' title='ZK: ウィンドウをブラウザの中央に表示'/><author><name>木茂佐平</name><uri>http://www.blogger.com/profile/01091843968689405775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_OF_auIfbUdk/R23McOMIktI/AAAAAAAAADg/fAFeiIelda0/s72-c/wndpos.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8907821310655746853.post-4425726039707391484</id><published>2007-12-02T12:33:00.001+09:00</published><updated>2007-12-02T12:33:36.080+09:00</updated><title type='text'>ZK: iText</title><content type='html'>&lt;a href="http://www.zkoss.org/smalltalks/zkreport/zkreport.dsp"&gt;Report with ZK : Using JasperReports As an Example&lt;/a&gt;を参考に動的にPDFファイルを作成するサンプルを作ってみました。&lt;br /&gt;PDF作成にはiTextライブラリを使います。まず&lt;a href="http//www.lowagie.com/iText/"&gt;こちらのサイト&lt;/a&gt;からjarファイルをダウンロードします。日本語を使うために&lt;a href="http://itextpdf.sourceforge.net/"&gt;こちらのサイト&lt;/a&gt;からiTextAsian.jarをダウンロードします。&lt;br /&gt;次にダウンロードしたjarファイルをWEB-INF/libへインポートして準備完了です。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br /&gt;&amp;lt;?page style="height:100%" ?&amp;gt;   &lt;br /&gt;&amp;lt;zk xmlns="http://www.zkoss.org/2005/zul" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.zkoss.org/2005/zul http://www.zkoss.org/2005/zul/zul.xsd "&amp;gt;&lt;br /&gt;&amp;lt;window width="100%" height="100%"&amp;gt;&lt;br /&gt;&amp;lt;borderlayout height="100%"&amp;gt;&lt;br /&gt;    &amp;lt;north maxsize="24" size="24" border="0"&amp;gt;&lt;br /&gt;       &amp;lt;hbox&amp;gt;&lt;br /&gt;          名前:&amp;lt;textbox id="name"/&amp;gt;&lt;br /&gt;        &amp;lt;button label="PDF出力" onClick="doReport()"/&amp;gt;&lt;br /&gt;       &amp;lt;/hbox&amp;gt; &lt;br /&gt;    &amp;lt;/north&amp;gt;&lt;br /&gt;    &amp;lt;center border="none" flex="true"&amp;gt;&lt;br /&gt;        &amp;lt;iframe id="report" /&amp;gt;&lt;br /&gt;    &amp;lt;/center&amp;gt;&lt;br /&gt;&amp;lt;/borderlayout&amp;gt;&lt;br /&gt;&amp;lt;zscript&amp;gt;&amp;lt;![CDATA[&lt;br /&gt;  import java.io.*;&lt;br /&gt;  import com.lowagie.text.*;&lt;br /&gt;  import com.lowagie.text.pdf.*;&lt;br /&gt;  import org.zkoss.util.media.AMedia;&lt;br /&gt;  import java.awt.Color;&lt;br /&gt; &lt;br /&gt;  void doReport() {&lt;br /&gt;       try {&lt;br /&gt;         //iTextでは出力するPDF全体はDocumentクラスで表現される&lt;br /&gt;         Document doc = new Document();&lt;br /&gt;         //ゴシック体の日本語ベースフォント作成&lt;br /&gt;         BaseFont bf_goth = BaseFont.createFont(&lt;br /&gt;                             "HeiseiKakuGo-W5", //ゴシック体&lt;br /&gt;                             "UniJIS-UCS2-H",   //横書日本語Unicodeエンコーディング&lt;br /&gt;                             BaseFont.NOT_EMBEDDED);&lt;br /&gt;         //明朝体の日本語ベースフォント作成                             &lt;br /&gt;         BaseFont bf_min =  BaseFont.createFont(&lt;br /&gt;                             "HeiseiMin-W3",    //明朝体&lt;br /&gt;                             "UniJIS-UCS2-H",   //横書日本語Unicodeエンコーディング&lt;br /&gt;                             BaseFont.NOT_EMBEDDED);  &lt;br /&gt;                            &lt;br /&gt;        //日本語フォント作成&lt;br /&gt;        Font font_goth = new Font(bf_goth);&lt;br /&gt;        Font font_min15 = new Font(bf_min, 15);     //明朝体 15pt&lt;br /&gt;        Font font_goth8red = new Font(bf_goth, 8);  //ゴシック体8pt&lt;br /&gt;        font_goth8red.setColor(new Color(255,0,0)); //文字色を赤に設定                      &lt;br /&gt;                            &lt;br /&gt;        //出力用のStreamをインスタンス化し&lt;br /&gt;        ByteArrayOutputStream byteout = new ByteArrayOutputStream();&lt;br /&gt;        //PDFの出力先へ割り当てる。&lt;br /&gt;        PdfWriter.getInstance(doc, byteout);&lt;br /&gt;&lt;br /&gt;        doc.open();&lt;br /&gt;        //本文を追加                            &lt;br /&gt;        doc.add(new Paragraph(name.value + "さん、 " + "こんにちは!!" , font_goth));&lt;br /&gt;        doc.add(new Paragraph(name.value + "さん、 " + "こんにちは!!" , font_min15));&lt;br /&gt;        doc.add(new Paragraph(name.value + "さん、 " + "こんにちは!!" , font_goth8red));     &lt;br /&gt;        doc.close();&lt;br /&gt;     &lt;br /&gt;        //PDF出力から入力ストリームを作成し&lt;br /&gt;       final InputStream mediais = new ByteArrayInputStream(byteout.toByteArray());&lt;br /&gt;       //入力ストリームをiframeのコンテンツへ媒介するAMediaオブジェクトを生成   &lt;br /&gt;       final AMedia amedia =&lt;br /&gt;                new AMedia("FirstReport.pdf", "pdf", "application/pdf", mediais);&lt;br /&gt;               &lt;br /&gt;       //iframeにコンテンツをセット&lt;br /&gt;      report.setContent(amedia);&lt;br /&gt;       }catch (IOException e) {&lt;br /&gt;         e.printStackTrace();&lt;br /&gt;       }catch (DocumentException e) {&lt;br /&gt;         e.printStackTrace();&lt;br /&gt;      }&lt;br /&gt;   }&lt;br /&gt;]]&amp;gt;&amp;lt;/zscript&amp;gt;&lt;br /&gt;&amp;lt;/window&amp;gt;&lt;br /&gt;&amp;lt;/zk&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8907821310655746853-4425726039707391484?l=kemo-sah-bee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kemo-sah-bee.blogspot.com/feeds/4425726039707391484/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8907821310655746853&amp;postID=4425726039707391484' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/4425726039707391484'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/4425726039707391484'/><link rel='alternate' type='text/html' href='http://kemo-sah-bee.blogspot.com/2007/12/zk-itext.html' title='ZK: iText'/><author><name>木茂佐平</name><uri>http://www.blogger.com/profile/01091843968689405775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8907821310655746853.post-106839177784093372</id><published>2007-11-19T17:21:00.000+09:00</published><updated>2007-11-21T12:49:14.624+09:00</updated><title type='text'>ZK + Seasar: JFreeChart(2)</title><content type='html'>チャートモデルにSimpleCategoryModelを使用するグラフを表示します。次のグラフのモデルにSimpleCatagoryModelが使えます。&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;棒グラフ&lt;br /&gt;&lt;li&gt;折れ線グラフ&lt;br /&gt;&lt;li&gt;エリアグラフ  &lt;br /&gt;&lt;li&gt;積み上げ棒グラフ  &lt;br /&gt;&lt;li&gt;積み上げエリアグラフ      &lt;br /&gt;&lt;li&gt;ウォータフォールグラフ&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;データは降雨量ですので意味不明なグラフもありますがご愛嬌ということで(^^  &lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br /&gt;&amp;lt;?variable-resolver class="org.zkoss.zkplus.seasar.DelegatingVariableResolver"?&amp;gt;&lt;br /&gt;&amp;lt;zk xmlns="http://www.zkoss.org/2005/zul" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.zkoss.org/2005/zul http://www.zkoss.org/2005/zul/zul.xsd "&amp;gt;&lt;br /&gt;&amp;lt;window title="東京 年間降雨量デモ" width="500px" border="normal"&amp;gt;&lt;br /&gt;&amp;lt;vbox&amp;gt;&lt;br /&gt;&amp;lt;chart id="myChart" title="月別降雨量 (mm)" width="500" height="250" type="bar" threeD="false" fgAlpha="128"/&amp;gt;&lt;br /&gt;&amp;lt;radiogroup&amp;gt;&lt;br /&gt;  &amp;lt;radio label="棒グラフ" id="bar" onCheck="myChart.type=self.id" checked="true"/&amp;gt;&lt;br /&gt;  &amp;lt;radio label="折れ線グラフ" id="line" onCheck="myChart.type=self.id" /&amp;gt;&lt;br /&gt;  &amp;lt;radio label="エリアグラフ" id="area" onCheck="myChart.type=self.id" /&amp;gt;&lt;br /&gt;  &amp;lt;radio label="積み上げ棒グラフ" id="stacked_bar" onCheck="myChart.type=self.id" /&amp;gt;&lt;br /&gt;  &amp;lt;radio label="積み上げエリアグラフ" id="stacked_area" onCheck="myChart.type=self.id" /&amp;gt;&lt;br /&gt;  &amp;lt;radio label="ウォータフォール" id="waterfall" onCheck="myChart.type=self.id" /&amp;gt;&lt;br /&gt;&amp;lt;/radiogroup&amp;gt;&lt;br /&gt;&amp;lt;checkbox label="3D チャート" checked="false" onCheck="myChart.setThreeD(self.isChecked())"/&amp;gt;&lt;br /&gt;&amp;lt;/vbox&amp;gt;&lt;br /&gt;&amp;lt;zscript&amp;gt;&lt;br /&gt;  model = new SimpleCategoryModel();&lt;br /&gt;  model.clear();&lt;br /&gt;  // 年を指定して降雨量をセット&lt;br /&gt;  void processYear(String year) {&lt;br /&gt;    rainStats = rainStatsService.selectAll(year);&lt;br /&gt;    for(data: rainStats){&lt;br /&gt;       model.setValue(year, data.month, data.rainfall); &lt;br /&gt;     }&lt;br /&gt;   }&lt;br /&gt;  processYear("2003");&lt;br /&gt;  processYear("2004");&lt;br /&gt;  processYear("2005");    &lt;br /&gt;  myChart.setModel(model);         &lt;br /&gt;&amp;lt;/zscript&amp;gt;&lt;br /&gt;&amp;lt;/window&amp;gt;&lt;br /&gt;&amp;lt;/zk&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_OF_auIfbUdk/R0FIf3ukF0I/AAAAAAAAADI/7KJPwh-vPrE/s1600-h/bar.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_OF_auIfbUdk/R0FIf3ukF0I/AAAAAAAAADI/7KJPwh-vPrE/s320/bar.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5134464762551473986" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_OF_auIfbUdk/R0FIpnukF1I/AAAAAAAAADQ/VATGinal12g/s1600-h/line.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_OF_auIfbUdk/R0FIpnukF1I/AAAAAAAAADQ/VATGinal12g/s320/line.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5134464930055198546" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_OF_auIfbUdk/R0IyvXukF2I/AAAAAAAAADY/tArgiHWsc_I/s1600-h/stacked-bar.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_OF_auIfbUdk/R0IyvXukF2I/AAAAAAAAADY/tArgiHWsc_I/s320/stacked-bar.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5134722314560345954" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8907821310655746853-106839177784093372?l=kemo-sah-bee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kemo-sah-bee.blogspot.com/feeds/106839177784093372/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8907821310655746853&amp;postID=106839177784093372' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/106839177784093372'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/106839177784093372'/><link rel='alternate' type='text/html' href='http://kemo-sah-bee.blogspot.com/2007/11/zk-seasar-jfreechart-2.html' title='ZK + Seasar: JFreeChart(2)'/><author><name>木茂佐平</name><uri>http://www.blogger.com/profile/01091843968689405775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_OF_auIfbUdk/R0FIf3ukF0I/AAAAAAAAADI/7KJPwh-vPrE/s72-c/bar.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8907821310655746853.post-5452384111662472006</id><published>2007-11-12T12:50:00.000+09:00</published><updated>2007-11-19T17:51:45.143+09:00</updated><title type='text'>ZK + Seasar + Ruby: JFreeChart</title><content type='html'>JFreeChartアプリをRubyで書き直してみました。&lt;br /&gt;rainStatsServiceコンポーネントはSingletonS2Container.getComponent(Object componentKey)を用い取得することにしました。Seasarの機能リファレンスによるとcomponentKeyにはコンポーネントのクラスまたはコンポーネント名を指定できるそうです。&lt;br /&gt;コンポーネント名を自動登録するようにapp.diconへ追加設定します。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;...&lt;br /&gt;&amp;lt;component  &lt;br /&gt; class="org.seasar.framework.container.autoregister.FileSystemComponentAutoRegister"&amp;gt;&lt;br /&gt;    &amp;lt;property name="autoNaming"&amp;gt;&lt;br /&gt;        &amp;lt;component class="org.seasar.framework.container.autoregister.DefaultAutoNaming"&amp;gt;&lt;br /&gt;            &amp;lt;initMethod name="setCustomizedName"&amp;gt;&lt;br /&gt;                &amp;lt;arg&amp;gt;"zkseasar.service.EmpService"&amp;lt;/arg&amp;gt;&lt;br /&gt;                &amp;lt;arg&amp;gt;"empService"&amp;lt;/arg&amp;gt;&lt;br /&gt;            &amp;lt;/initMethod&amp;gt;&lt;br /&gt;        &amp;lt;/component&amp;gt;&lt;br /&gt;    &amp;lt;/property&amp;gt;&lt;br /&gt;    &amp;lt;initMethod name="addClassPattern"&amp;gt;&lt;br /&gt;        &amp;lt;arg&amp;gt;"zkseasar.service"&amp;lt;/arg&amp;gt;&lt;br /&gt;        &amp;lt;arg&amp;gt;".*Service"&amp;lt;/arg&amp;gt;&lt;br /&gt;    &amp;lt;/initMethod&amp;gt;&lt;br /&gt;&amp;lt;/component&amp;gt;&lt;br /&gt;...&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;上記の設定でzkseaser/service/EmpServiceがempServiceというコンポーネント名で登録されるように、zkseaser/service/下の正規表現.*Serviceで表されるファイル名の先頭が大文字から小文字に変換された形で自動的にコンポーネント登録されます。&lt;br /&gt;コンポーネントが自動登録されたか確認してみます。web.xmlでs2servletのdebugパラメータをtrueにしてTomcatを再起動します。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;...&lt;br /&gt;&amp;lt;servlet&amp;gt;&lt;br /&gt;    &amp;lt;servlet-name&amp;gt;s2servlet&amp;lt;/servlet-name&amp;gt;&lt;br /&gt;    &amp;lt;servlet-class&amp;gt;org.seasar.framework.container.servlet.S2ContainerServlet&amp;lt;/servlet-class&amp;gt;&lt;br /&gt;    &amp;lt;init-param&amp;gt;&lt;br /&gt;        &amp;lt;param-name&amp;gt;configPath&amp;lt;/param-name&amp;gt;&lt;br /&gt;        &amp;lt;param-value&amp;gt;app.dicon&amp;lt;/param-value&amp;gt;&lt;br /&gt;    &amp;lt;/init-param&amp;gt;&lt;br /&gt;    &amp;lt;init-param&amp;gt;&lt;br /&gt;        &amp;lt;param-name&amp;gt;debug&amp;lt;/param-name&amp;gt;&lt;br /&gt;        &amp;lt;param-value&amp;gt;true&amp;lt;/param-value&amp;gt;&lt;br /&gt;    &amp;lt;/init-param&amp;gt;&lt;br /&gt;    &amp;lt;load-on-startup&amp;gt;1&amp;lt;/load-on-startup&amp;gt;&lt;br /&gt;&amp;lt;/servlet&amp;gt;&lt;br /&gt;...&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;WEBブラウザで下記のアドレスにアクセスし確認します。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;http://localhost:8080/zkseasar/s2servlet?command=list&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_OF_auIfbUdk/RzgRN7lHwhI/AAAAAAAAAC4/uQgrgfNsGvc/s1600-h/s2servlet.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_OF_auIfbUdk/RzgRN7lHwhI/AAAAAAAAAC4/uQgrgfNsGvc/s320/s2servlet.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5131870706418041362" /&gt;&lt;/a&gt;&lt;br /&gt;empServiceとrainStatsServiceがコンポーネント登録されていました。&lt;br /&gt;&lt;br /&gt;スクリプトをRubyで書き直します。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;...&lt;br /&gt;&amp;lt;window title="東京 年間降雨量デモ (Ruby)" width="500px" border="normal"&amp;gt;&lt;br /&gt;年度: &lt;br /&gt;&amp;lt;listbox id="yr" rows="1" mold="select" onSelect="ruby:process_year"&amp;gt;&lt;br /&gt;  &amp;lt;listitem label="2005" selected="true"/&amp;gt;&lt;br /&gt;  &amp;lt;listitem label="2004"/&amp;gt;&lt;br /&gt;  &amp;lt;listitem label="2003"/&amp;gt;&lt;br /&gt;&amp;lt;/listbox&amp;gt;&lt;br /&gt;&amp;lt;vbox&amp;gt;&lt;br /&gt;&amp;lt;chart id="myChart" title="月別降雨量 (mm)" width="500" height="250" type="pie" threeD="false" fgAlpha="128"/&amp;gt;&lt;br /&gt;&amp;lt;checkbox label="3D チャート" checked="false" onCheck="myChart.setThreeD(self.isChecked())"/&amp;gt;&lt;br /&gt;&amp;lt;/vbox&amp;gt;&lt;br /&gt;&amp;lt;zscript language="ruby"&amp;gt;&lt;br /&gt;  import 'zkseasar.service.RainStatsService'&lt;br /&gt;  import 'org.zkoss.zul.SimplePieModel'&lt;br /&gt;  import 'org.seasar.framework.container.SingletonS2Container'&lt;br /&gt;&lt;br /&gt;  $model = SimplePieModel.new&lt;br /&gt;&lt;br /&gt;  #自動登録されたコンポーネント名でコンポーネントを取り出す。&lt;br /&gt;  $rainStatsService = SingletonS2Container.getComponent('rainStatsService')&lt;br /&gt;&lt;br /&gt;  def process_year&lt;br /&gt;    year = $yr.selectedItem.label&lt;br /&gt;    $model.clear&lt;br /&gt;    rain_stats = $rainStatsService.selectAll(year)&lt;br /&gt;    rain_stats.each{|data| $model.setValue(data.month, data.rainfall)}&lt;br /&gt;&lt;br /&gt;    $myChart.model = $model&lt;br /&gt;  end&lt;br /&gt;  process_year&lt;br /&gt;&amp;lt;/zscript&amp;gt;&lt;br /&gt;&amp;lt;/window&amp;gt;&lt;br /&gt;...&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;RubyでS2ContainerのコンポーネントにもJFreeChartにもアクセスすることができました。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8907821310655746853-5452384111662472006?l=kemo-sah-bee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kemo-sah-bee.blogspot.com/feeds/5452384111662472006/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8907821310655746853&amp;postID=5452384111662472006' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/5452384111662472006'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/5452384111662472006'/><link rel='alternate' type='text/html' href='http://kemo-sah-bee.blogspot.com/2007/11/zk-ruby-seasar-jfreechart.html' title='ZK + Seasar + Ruby: JFreeChart'/><author><name>木茂佐平</name><uri>http://www.blogger.com/profile/01091843968689405775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_OF_auIfbUdk/RzgRN7lHwhI/AAAAAAAAAC4/uQgrgfNsGvc/s72-c/s2servlet.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8907821310655746853.post-6448771695859785569</id><published>2007-11-07T12:40:00.000+09:00</published><updated>2007-11-07T18:09:04.016+09:00</updated><title type='text'>ZK + Seasar: JFreeChart</title><content type='html'>今は見当たりませんが、以前ZKサイトのSmalltalksにあったパイチャートデモを参考に東京の月別降雨量をパイチャートで表示するアプリを作ってみました。データベースにはs2jdbcでアクセスします。&lt;br /&gt;&lt;li&gt;テーブル作成&lt;br /&gt;データベースが起動していないときはDatabaseViewでzkseasarプロジェクトをクリックしデータベースを起動します。次にブラウザでlocalhost:8082へアクセスしH2 Consoleを開きデータベースに接続します。SQLステートメントに下記のSQLをコピーし実行するとテーブルが作成されサンプルデータが登録されます。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;create table rain_stats(&lt;br /&gt;  year integer,&lt;br /&gt;  month char(3),&lt;br /&gt;  rainfall decimal(4, 1)&lt;br /&gt;);&lt;br /&gt;&lt;br /&gt;insert into rain_stats values(2003, '1月', 101.0);&lt;br /&gt;insert into rain_stats values(2003, '2月', 53.5);&lt;br /&gt;insert into rain_stats values(2003, '3月', 159.5);&lt;br /&gt;insert into rain_stats values(2003, '4月', 121.0);&lt;br /&gt;insert into rain_stats values(2003, '5月', 172.5);&lt;br /&gt;insert into rain_stats values(2003, '6月', 85.0);&lt;br /&gt;insert into rain_stats values(2003, '7月', 187.5);&lt;br /&gt;insert into rain_stats values(2003, '8月', 370.0);&lt;br /&gt;insert into rain_stats values(2003, '9月', 150.0);&lt;br /&gt;insert into rain_stats values(2003, '10月', 171.5);&lt;br /&gt;insert into rain_stats values(2003, '11月', 229.5);&lt;br /&gt;insert into rain_stats values(2003, '12月', 53.0);&lt;br /&gt;insert into rain_stats values(2004, '1月', 3.5);&lt;br /&gt;insert into rain_stats values(2004, '2月', 20.0);&lt;br /&gt;insert into rain_stats values(2004, '3月', 129.5);&lt;br /&gt;insert into rain_stats values(2004, '4月', 69.5);&lt;br /&gt;insert into rain_stats values(2004, '5月', 149.0);&lt;br /&gt;insert into rain_stats values(2004, '6月', 112.5);&lt;br /&gt;insert into rain_stats values(2004, '7月', 23.5);&lt;br /&gt;insert into rain_stats values(2004, '8月', 79.5);&lt;br /&gt;insert into rain_stats values(2004, '9月', 195.0);&lt;br /&gt;insert into rain_stats values(2004, '10月', 780.0);&lt;br /&gt;insert into rain_stats values(2004, '11月', 108.5);&lt;br /&gt;insert into rain_stats values(2004, '12月', 79.5);&lt;br /&gt;insert into rain_stats values(2005, '1月', 77.0);&lt;br /&gt;insert into rain_stats values(2005, '2月', 48.0);&lt;br /&gt;insert into rain_stats values(2005, '3月', 71.0);&lt;br /&gt;insert into rain_stats values(2005, '4月', 81.0);&lt;br /&gt;insert into rain_stats values(2005, '5月', 180.5);&lt;br /&gt;insert into rain_stats values(2005, '6月', 170.5);&lt;br /&gt;insert into rain_stats values(2005, '7月', 247.5);&lt;br /&gt;insert into rain_stats values(2005, '8月', 189.5);&lt;br /&gt;insert into rain_stats values(2005, '9月', 177.5);&lt;br /&gt;insert into rain_stats values(2005, '10月', 201.5);&lt;br /&gt;insert into rain_stats values(2005, '11月', 34.5);&lt;br /&gt;insert into rain_stats values(2005, '12月', 3.5);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;エンティティRainStatsを作成する。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;package zkseasar.entity;&lt;br /&gt;&lt;br /&gt;import java.math.BigDecimal;&lt;br /&gt;import javax.persistence.Entity;&lt;br /&gt;import javax.persistence.Table;&lt;br /&gt;&lt;br /&gt;@Entity&lt;br /&gt;@Table(name = "RAIN_STATS")&lt;br /&gt;public class RainStats {&lt;br /&gt;  public Integer year;&lt;br /&gt; &lt;br /&gt;  public String month;&lt;br /&gt; &lt;br /&gt;  public BigDecimal rainfall;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;サービスRainStatsServiceを作成する。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;package zkseasar.service;&lt;br /&gt;import java.util.List;&lt;br /&gt;import org.seasar.extension.jdbc.JdbcManager;&lt;br /&gt;import zkseasar.entity.RainStats;&lt;br /&gt;&lt;br /&gt;public class RainStatsService {&lt;br /&gt;   public JdbcManager jdbcManager;&lt;br /&gt;&lt;br /&gt;   public List&amp;lt;RainStats&amp;gt; selectAll(String year) {&lt;br /&gt;     return jdbcManager.from(RainStats.class)&lt;br /&gt;                       .where("year = ?", year)&lt;br /&gt;                       .getResultList();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;rainfall.zulを作成する。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br /&gt;&amp;lt;?variable-resolver class="org.zkoss.zkplus.seasar.DelegatingVariableResolver"?&amp;gt;&lt;br /&gt;&amp;lt;zk xmlns="http://www.zkoss.org/2005/zul" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.zkoss.org/2005/zul http://www.zkoss.org/2005/zul/zul.xsd "&amp;gt;&lt;br /&gt;&amp;lt;window title="東京 年間降雨量デモ" width="500px" border="normal"&amp;gt;&lt;br /&gt;年度: &lt;br /&gt;&amp;lt;listbox id="yr" rows="1" mold="select" onSelect="processYear(self.selectedItem.label)"&amp;gt;&lt;br /&gt;  &amp;lt;listitem label="2005" selected="true"/&amp;gt;&lt;br /&gt;  &amp;lt;listitem label="2004"/&amp;gt;&lt;br /&gt;  &amp;lt;listitem label="2003"/&amp;gt;&lt;br /&gt;&amp;lt;/listbox&amp;gt;&lt;br /&gt;&amp;lt;vbox&amp;gt;&lt;br /&gt;&amp;lt;chart id="mychart" title="月別降雨量 (mm)" width="500" height="250" type="pie" threeD="false" fgAlpha="128"/&amp;gt;&lt;br /&gt;&amp;lt;checkbox label="3D チャート" checked="false" onCheck="mychart.setThreeD(self.isChecked())"/&amp;gt;&lt;br /&gt;&amp;lt;/vbox&amp;gt;&lt;br /&gt;&amp;lt;zscript&amp;gt;&lt;br /&gt;  model = new SimplePieModel();&lt;br /&gt;&lt;br /&gt;  // 年を指定してパイチャートを表示&lt;br /&gt;  void processYear(String year) {&lt;br /&gt;    model.clear();&lt;br /&gt;    rainStats = rainStatsService.selectAll(year);&lt;br /&gt;    for(data: rainStats){&lt;br /&gt;      model.setValue(data.month, data.rainfall);&lt;br /&gt;     }&lt;br /&gt;    mychart.setModel(model);&lt;br /&gt;   }&lt;br /&gt;  // デフォルトは最新の年&lt;br /&gt;  processYear("2005");       &lt;br /&gt;&amp;lt;/zscript&amp;gt;&lt;br /&gt;&amp;lt;/window&amp;gt;&lt;br /&gt;&amp;lt;/zk&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;li&gt;localhost:8080/zkseasar/view/rainfall.zulへアクセスする。&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_OF_auIfbUdk/RzE6w46QDfI/AAAAAAAAACw/ATubb762L2U/s1600-h/rainfall.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_OF_auIfbUdk/RzE6w46QDfI/AAAAAAAAACw/ATubb762L2U/s320/rainfall.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5129946062136544754" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;当初パイチャートの日本語が文字化けしていました。OSはFedora Core6です&lt;br /&gt;http://blog.goo.ne.jp/koregaiya/e/ac4c0c130df9fa8ef0cf7e31be71671aを参考にして文字化けを解消することが出来ました。コマンドだけ書いておきます。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;# cd $JAVA_HOME/jre/lib/fonts&lt;br /&gt;# mkdir fallback&lt;br /&gt;# cd fallback&lt;br /&gt;# ln -s /usr/share/fonts/japanese/TrueType/ipagp.ttf kochi-gothic-subst.ttf&lt;br /&gt;# ln -s /usr/share/fonts/japanese/TrueType/ipamp.ttf kochi-mincho-subst.ttf&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8907821310655746853-6448771695859785569?l=kemo-sah-bee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kemo-sah-bee.blogspot.com/feeds/6448771695859785569/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8907821310655746853&amp;postID=6448771695859785569' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/6448771695859785569'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/6448771695859785569'/><link rel='alternate' type='text/html' href='http://kemo-sah-bee.blogspot.com/2007/11/zk-seasar-jfreechart.html' title='ZK + Seasar: JFreeChart'/><author><name>木茂佐平</name><uri>http://www.blogger.com/profile/01091843968689405775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_OF_auIfbUdk/RzE6w46QDfI/AAAAAAAAACw/ATubb762L2U/s72-c/rainfall.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8907821310655746853.post-385199774904881885</id><published>2007-11-05T16:54:00.000+09:00</published><updated>2007-11-06T12:56:26.460+09:00</updated><title type='text'>ZK: Seasar2</title><content type='html'>ZKからSeasar2のS2JDBCを利用してデータベースにアクセスするアプリケーションをとりあえず動作させた手順のメモです。&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Seasarサイトの「セットアップ&amp;gt;Doltengを使う場合」を参考にしてEclipseにSeasarをセットアップする。&lt;br /&gt;&lt;br /&gt;&lt;li&gt;EclipseでChuraプロジェクトを作成する。&lt;br /&gt;File&amp;gt;New&amp;gt;Other&amp;gt;Chura&amp;gt;Chura Project&lt;br /&gt;Nextボタンを押してCreate a Chura Projectダイアログを表示する&lt;br /&gt;&lt;br /&gt;Project name; [zkseasar]&lt;br /&gt;Root Package Name: [zkseasar] &lt;br /&gt;Project Type: Super Agile(Teeda + S2Dao)&lt;br /&gt;&lt;br /&gt;Finishボタンを押すとプロジェクトが作成される。&lt;br /&gt;zkseasarプロジェクトを右クリックしメニューを表示する。&lt;br /&gt; 「Tomcat プロジェクト&amp;gt;コンテキスト定義を更新」をクリックする。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;ZKライブラリをPROJECTHOME/src/webapp/WEB-INF/libへコピーする。&lt;br /&gt;プロジェクトツリーでzkseasarをクリック&lt;br /&gt;src&amp;gt;main&amp;gt;webapp&amp;gt;WEB-INF&amp;gt;libを選択し右クリックしてメニューを表示する。&lt;br /&gt;ImportをクリックしImport Selectダイアログを表示する。&lt;br /&gt;General&amp;gt;File Systemを選択しNextボタンをクリックしFile systemダイアログを表示する。&lt;br /&gt;From directory: の右にある BrowseボタンをクリックしZKを展開してできたディレクトリのdist/libのjarファイルを選択しコピーする。&lt;br /&gt;&lt;br /&gt;今の作業を繰り返しdist/lib/extのjarファイルもコピーする。&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&lt;li&gt;同様にs2-tiger/libにあるgeronimo-jpa_3.0_spec-1.0.jarとgeronimo-ejb_3.0_spec-1.0.jarをWEB-INF/libへコピーする。&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;&lt;li&gt;同様にs2-tiger/src/test/resourcesにあるs2jdbc.diconをsrc/main/resourcesへコピーする。&lt;br /&gt;&lt;br /&gt;&lt;li&gt;s2jdbc.diconを編集しdialectをh2dialectに変更しChuraプロジェクトのサンプル&lt;br /&gt;データベースにあわせる。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;components&amp;gt;&lt;br /&gt;...&lt;br /&gt;  &amp;lt;property name="dialect"&amp;gt;h2Dialect&amp;lt;/property&amp;gt;&lt;br /&gt;...&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;geronimo-jpa_3.0_spec-1.0.jarをBuild Pathに追加する。&lt;br /&gt;プロジェクトツリーでzkseasarをクリック&lt;br /&gt;Referenced Librariesを右クリックしメニューを表示する。&lt;br /&gt;Build Path&amp;gt;Configure Build Path...をクリックしJava Build Pathダイアログを表示する。&lt;br /&gt;&lt;br /&gt;LibrariesタグをクリックしAdd External JARS..ボタンをクリックして出てきたダイアログでgeronimo-jpa_3.0_spec-1.0.jarを選択しOKボタンをクリックする。&lt;br /&gt;&lt;br /&gt;&lt;li&gt;app.diconを編集しs2jdbc.diconを追加する。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;  .....&lt;br /&gt;   &amp;lt;include path="s2jdbc.dicon"/&amp;gt;&lt;br /&gt;&amp;lt;/components&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;convention.diconを編集しorg.seasar.framework.convention.impl.PersistenceConventionImplを登録する。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt; ....&lt;br /&gt;   &amp;lt;component class="org.seasar.framework.convention.impl.PersistenceConventionImpl"/&amp;gt;&lt;br /&gt;&amp;lt;/components&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;WEB-INF/web.xmlへzkdemoのweb.xmlから必要そうな部分をコピーする。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;....&lt;br /&gt;&amp;lt;!-- ZK --&amp;gt;&lt;br /&gt;  &amp;lt;listener&amp;gt;&lt;br /&gt;    &amp;lt;listener-class&amp;gt;org.zkoss.zk.ui.http.HttpSessionListener&amp;lt;/listener-class&amp;gt;&lt;br /&gt;  &amp;lt;/listener&amp;gt;&lt;br /&gt;  &amp;lt;servlet&amp;gt;&lt;br /&gt;     &amp;lt;servlet-name&amp;gt;zkLoader&amp;lt;/servlet-name&amp;gt;&lt;br /&gt;     &amp;lt;servlet-class&amp;gt;org.zkoss.zk.ui.http.DHtmlLayoutServlet&amp;lt;/servlet-class&amp;gt;&lt;br /&gt;     &amp;lt;init-param&amp;gt;&lt;br /&gt;        &amp;lt;param-name&amp;gt;update-uri&amp;lt;/param-name&amp;gt;&lt;br /&gt;        &amp;lt;param-value&amp;gt;/zkau&amp;lt;/param-value&amp;gt;&lt;br /&gt;     &amp;lt;/init-param&amp;gt;&lt;br /&gt;     &amp;lt;load-on-startup&amp;gt;1&amp;lt;/load-on-startup&amp;gt;&amp;lt;!-- Must --&amp;gt;&lt;br /&gt;  &amp;lt;/servlet&amp;gt;&lt;br /&gt;  &amp;lt;servlet-mapping&amp;gt;&lt;br /&gt;     &amp;lt;servlet-name&amp;gt;zkLoader&amp;lt;/servlet-name&amp;gt;&lt;br /&gt;     &amp;lt;url-pattern&amp;gt;*.zul&amp;lt;/url-pattern&amp;gt;&lt;br /&gt;  &amp;lt;/servlet-mapping&amp;gt;&lt;br /&gt;  &amp;lt;servlet-mapping&amp;gt;&lt;br /&gt;     &amp;lt;servlet-name&amp;gt;zkLoader&amp;lt;/servlet-name&amp;gt;&lt;br /&gt;     &amp;lt;url-pattern&amp;gt;*.zhtml&amp;lt;/url-pattern&amp;gt;&lt;br /&gt;  &amp;lt;/servlet-mapping&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;!-- Optional. Uncomment it if you want to use richlets.&lt;br /&gt;--&amp;gt;&lt;br /&gt;  &amp;lt;servlet-mapping&amp;gt;&lt;br /&gt;     &amp;lt;servlet-name&amp;gt;zkLoader&amp;lt;/servlet-name&amp;gt;&lt;br /&gt;     &amp;lt;url-pattern&amp;gt;/zk/*&amp;lt;/url-pattern&amp;gt;&lt;br /&gt;  &amp;lt;/servlet-mapping&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;servlet&amp;gt;&lt;br /&gt;     &amp;lt;servlet-name&amp;gt;auEngine&amp;lt;/servlet-name&amp;gt;&lt;br /&gt;     &amp;lt;servlet-class&amp;gt;org.zkoss.zk.au.http.DHtmlUpdateServlet&amp;lt;/servlet-class&amp;gt;&lt;br /&gt;  &amp;lt;/servlet&amp;gt;&lt;br /&gt;  &amp;lt;servlet-mapping&amp;gt;&lt;br /&gt;     &amp;lt;servlet-name&amp;gt;auEngine&amp;lt;/servlet-name&amp;gt;&lt;br /&gt;     &amp;lt;url-pattern&amp;gt;/zkau/*&amp;lt;/url-pattern&amp;gt;&lt;br /&gt;  &amp;lt;/servlet-mapping&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;!-- Miscellaneous --&amp;gt;&lt;br /&gt;  &amp;lt;session-config&amp;gt;&lt;br /&gt;     &amp;lt;session-timeout&amp;gt;120&amp;lt;/session-timeout&amp;gt;&lt;br /&gt;  &amp;lt;/session-config&amp;gt;&lt;br /&gt;....&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;アプリケーション作成&lt;/h3&gt;&lt;br /&gt;&lt;li&gt;エンティティEmp.javaを作成。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;package zkseasar.entity;&lt;br /&gt;import java.math.BigDecimal;&lt;br /&gt;import java.util.Date;&lt;br /&gt;&lt;br /&gt;import javax.persistence.Column;&lt;br /&gt;import javax.persistence.Entity;&lt;br /&gt;import javax.persistence.Table;&lt;br /&gt;&lt;br /&gt;@Entity&lt;br /&gt;@Table(name = "EMP")&lt;br /&gt;public class Emp {&lt;br /&gt;  @Column(name = "ID")&lt;br /&gt;  public Integer id;&lt;br /&gt; &lt;br /&gt;  @Column(name = "EMP_NO") &lt;br /&gt;  public Integer empNo;&lt;br /&gt; &lt;br /&gt;  @Column(name = "EMP_NAME") &lt;br /&gt;  public String empName;&lt;br /&gt; &lt;br /&gt;  @Column(name = "MGR_ID")&lt;br /&gt;  public Integer mgrId;&lt;br /&gt; &lt;br /&gt;  @Column(name = "HIREDATE")&lt;br /&gt;  public Date hiredate;&lt;br /&gt; &lt;br /&gt;  @Column(name = "SAL")&lt;br /&gt;  public BigDecimal sal;&lt;br /&gt; &lt;br /&gt;  @Column(name = "DEPT_ID")&lt;br /&gt;  public Integer deptId;&lt;br /&gt;&lt;br /&gt;  @Column(name = "VERSION_NO")&lt;br /&gt;  public Integer versionNo;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;サービスEmpService.java作成。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;package zkseasar.service;&lt;br /&gt;import java.util.List;&lt;br /&gt;&lt;br /&gt;import org.seasar.extension.jdbc.JdbcManager;&lt;br /&gt;import zkseasar.entity.Emp;&lt;br /&gt;&lt;br /&gt;public class EmpService {&lt;br /&gt;  public JdbcManager jdbcManager;&lt;br /&gt;&lt;br /&gt;  public List&amp;lt;Emp&amp;gt; selectAll() {&lt;br /&gt;    return jdbcManager.from(Emp.class).getResultList();&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;src/main/webapp/viewにemp.zulを作成。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br /&gt;&amp;lt;?variable-resolver class="org.zkoss.zkplus.seasar.DelegatingVariableResolver"?&amp;gt;&lt;br /&gt;&amp;lt;zk xmlns="http://www.zkoss.org/2005/zul" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.zkoss.org/2005/zul http://www.zkoss.org/2005/zul/zul.xsd "&amp;gt;&lt;br /&gt;&amp;lt;zscript &amp;gt;&lt;br /&gt;  import zkseasar.entity.Emp;&lt;br /&gt;  &lt;br /&gt;  public class MyRowRenderer implements RowRenderer {&lt;br /&gt;    public void render(Row row, Object data) {&lt;br /&gt;      new Intbox(((Emp)data).id).setParent(row);&lt;br /&gt;      new Intbox(((Emp)data).empNo).setParent(row);&lt;br /&gt;      new Textbox(((Emp)data).empName).setParent(row);&lt;br /&gt; //     new Intbox(((Emp)data).mgrId).setParent(row);&lt;br /&gt;      new Datebox(((Emp)data).hiredate).setParent(row);&lt;br /&gt;      new Decimalbox(((Emp)data).sal).setParent(row);&lt;br /&gt;      new Intbox(((Emp)data).deptId).setParent(row);&lt;br /&gt;      new Intbox(((Emp)data).versionNo).setParent(row);&lt;br /&gt;      }&lt;br /&gt;    }&lt;br /&gt;   emps = empService.selectAll();&lt;br /&gt;   model = new SimpleListModel(emps.toArray());&lt;br /&gt;   rowRenderer = new MyRowRenderer();&lt;br /&gt;&amp;lt;/zscript&amp;gt;&lt;br /&gt;&amp;lt;window title="Emplyee list" &amp;gt;&lt;br /&gt;  &amp;lt;grid model="${model}" rowRenderer="${rowRenderer}"&amp;gt;&lt;br /&gt;     &amp;lt;columns&amp;gt;&lt;br /&gt;        &amp;lt;column label="id"/&amp;gt;&lt;br /&gt;        &amp;lt;column label="Emp no"/&amp;gt;&lt;br /&gt;        &amp;lt;column label="Emp name"/&amp;gt;&lt;br /&gt;        &amp;lt;column label="Hiredate"/&amp;gt;&lt;br /&gt;        &amp;lt;column label="Sal"/&amp;gt; &lt;br /&gt;        &amp;lt;column label="Dept id"/&amp;gt; &lt;br /&gt;        &amp;lt;column label="Version no"/&amp;gt;&lt;br /&gt;    &amp;lt;/columns&amp;gt;&lt;br /&gt;  &amp;lt;/grid&amp;gt;&lt;br /&gt;&amp;lt;/window&amp;gt;&lt;br /&gt;&amp;lt;/zk&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt; &lt;br /&gt;&lt;li&gt;完成&lt;br /&gt;まだDBを起動していないときはDoltengと一緒にインストールしたDatabaseViewから起動する。&lt;br /&gt;  Window&gt;Show View&gt;Other&gt;Dolteng&gt;DatabaseViewをクリックしビューを表示。&lt;br /&gt;  ビューの中のzkseasarをクリックして表示されるjdbc.diconをクリックするとDBが起動する。&lt;br /&gt;Ellipse&gt;Tomcat&gt;Tomcat起動をクリックしTomcatを起動する。&lt;br /&gt;Webブラウザでhttp://localhost:8080/zkseasar/view/emp.zulを表示する。&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_OF_auIfbUdk/Ry7Se46QDeI/AAAAAAAAACo/OUvzSe5dHZ0/s1600-h/zkseasar+.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_OF_auIfbUdk/Ry7Se46QDeI/AAAAAAAAACo/OUvzSe5dHZ0/s320/zkseasar+.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5129268453736189410" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Seasarコンポーネントの変数もapp.diconからs2jdbc.dicon経由で自動的に設定されるようです、いいですね！&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8907821310655746853-385199774904881885?l=kemo-sah-bee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kemo-sah-bee.blogspot.com/feeds/385199774904881885/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8907821310655746853&amp;postID=385199774904881885' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/385199774904881885'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/385199774904881885'/><link rel='alternate' type='text/html' href='http://kemo-sah-bee.blogspot.com/2007/11/zk-seasar2.html' title='ZK: Seasar2'/><author><name>木茂佐平</name><uri>http://www.blogger.com/profile/01091843968689405775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_OF_auIfbUdk/Ry7Se46QDeI/AAAAAAAAACo/OUvzSe5dHZ0/s72-c/zkseasar+.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8907821310655746853.post-5279341549402492533</id><published>2007-10-26T06:38:00.000+09:00</published><updated>2007-10-27T09:35:54.985+09:00</updated><title type='text'>ZK: zulスキーマを使いzulファイルを生成する</title><content type='html'>Eclipe環境がセットアップできたのでzulファイルを作ってみました。&lt;br /&gt;&lt;li&gt;Project ExplorerでプロジェクトのWebContentディレクトリを選択しメニューを表示する&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_OF_auIfbUdk/RyBcaI6zInI/AAAAAAAAABg/pR5LwkNAqvk/s1600-h/0create_zul.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_OF_auIfbUdk/RyBcaI6zInI/AAAAAAAAABg/pR5LwkNAqvk/s320/0create_zul.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5125197980088083058" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;メニューからNew/Otherを選択しSelect a wizardダイアログを表示しXML/XMLを選択しNextボタンを押す&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_OF_auIfbUdk/RyBcpY6zIoI/AAAAAAAAABo/I54kqgYYPlE/s1600-h/1create_new_xml.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_OF_auIfbUdk/RyBcpY6zIoI/AAAAAAAAABo/I54kqgYYPlE/s320/1create_new_xml.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5125198242081088130" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;XML Fileダイアログを開きFile nameにhelloworld.zulを入力しNextボタンを押す&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_OF_auIfbUdk/RyBdSY6zIpI/AAAAAAAAABw/K8nl3UCHw3k/s1600-h/2helloworld-zul.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_OF_auIfbUdk/RyBdSY6zIpI/AAAAAAAAABw/K8nl3UCHw3k/s320/2helloworld-zul.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5125198946455724690" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;XML file作成方法選択ダイアログが開くのでCreate XML file form an XML schema file を選択しNextボタンを押す&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_OF_auIfbUdk/RyBeDI6zIqI/AAAAAAAAAB4/uU90sYPpqxM/s1600-h/3create_from_schema.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_OF_auIfbUdk/RyBeDI6zIqI/AAAAAAAAAB4/uU90sYPpqxM/s320/3create_from_schema.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5125199783974347426" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;スキーマファイル選択ダイアログの中からhttp//www.zkoss.org/2005/zul/zul.xsdを選択しNextボタンを押す&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_OF_auIfbUdk/RyE4QY6zIwI/AAAAAAAAACg/PtvClRuLH6k/s1600-h/4select_zul_xsd.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_OF_auIfbUdk/RyE4QY6zIwI/AAAAAAAAACg/PtvClRuLH6k/s320/4select_zul_xsd.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5125439705142469378" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;私の場合、ルートエレメントはwindowにしたい&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_OF_auIfbUdk/RyE2OI6zItI/AAAAAAAAACI/KTldzFs246k/s1600-h/5select_root_elm.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_OF_auIfbUdk/RyE2OI6zItI/AAAAAAAAACI/KTldzFs246k/s320/5select_root_elm.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5125437467464508114" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;p:プレフィックスが鬱陶しいのでEditボタンを押しprefixを消す&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_OF_auIfbUdk/RyE3VI6zIuI/AAAAAAAAACQ/dZoiUuE9RPc/s1600-h/6no_prefix.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_OF_auIfbUdk/RyE3VI6zIuI/AAAAAAAAACQ/dZoiUuE9RPc/s320/6no_prefix.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5125438687235220194" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;helloworld.zulが生成され、コンポーネント名やアトリビュート名の入力補完が可能になりました&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_OF_auIfbUdk/RyE30I6zIvI/AAAAAAAAACY/0XW95OzNFTA/s1600-h/helloworld-zul+.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_OF_auIfbUdk/RyE30I6zIvI/AAAAAAAAACY/0XW95OzNFTA/s320/helloworld-zul+.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5125439219811164914" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8907821310655746853-5279341549402492533?l=kemo-sah-bee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kemo-sah-bee.blogspot.com/feeds/5279341549402492533/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8907821310655746853&amp;postID=5279341549402492533' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/5279341549402492533'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/5279341549402492533'/><link rel='alternate' type='text/html' href='http://kemo-sah-bee.blogspot.com/2007/10/zulzul.html' title='ZK: zulスキーマを使いzulファイルを生成する'/><author><name>木茂佐平</name><uri>http://www.blogger.com/profile/01091843968689405775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_OF_auIfbUdk/RyBcaI6zInI/AAAAAAAAABg/pR5LwkNAqvk/s72-c/0create_zul.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8907821310655746853.post-9045577168366732757</id><published>2007-10-25T16:30:00.003+09:00</published><updated>2007-10-26T11:13:59.543+09:00</updated><title type='text'>ZK: Eclipseセットアップ</title><content type='html'>&lt;a href="http://en.wikibooks.org/wiki/ZK/How-Tos/"&gt;ZK How-Tos&lt;/a&gt;を参考にEclipse3.3.1へZK開発環境をセットアップした時のメモです。&lt;br /&gt;&lt;br /&gt;[OS] Fedora Core 6&lt;br /&gt;[Java] jdk1.5.0_09&lt;br /&gt;[Eclipse] &lt;a href="http://download.eclipse.org/webtools/downloads/"&gt;wtp-all-in-one-sdk-linux-gtk&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;zulファイルをXMLファイルとして扱う&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;EclipseのWindowメニューをクリック&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Preferencesを選択しPreferencesダイアログを開く&lt;br /&gt;&lt;br /&gt;&lt;li&gt;ダイアログの左サイドのツリーメニューでGeneral/Content Typesをクリック&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Content TypesペインでText/XMLを選択しAddボタンを押しNew File Typeダイアログを開く&lt;br /&gt;&lt;br /&gt;&lt;li&gt;File Typeに*.zulを入力しOKボタンを押す。&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_OF_auIfbUdk/RyBPmY6zIjI/AAAAAAAAABA/_sCa3oYN12w/s1600-h/xml_edit2.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_OF_auIfbUdk/RyBPmY6zIjI/AAAAAAAAABA/_sCa3oYN12w/s320/xml_edit2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5125183896890319410" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;zul.xsdスキーマのセットアップ&lt;/h3&gt;&lt;br /&gt;zul.xsdをセットアップすることでコンポーネント名やアトリビュートの入力補完が可能になります。&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Window/PreferencesメニューをクリックしPreferencesダイアログを開く&lt;br /&gt;&lt;br /&gt;&lt;li&gt;ダイアログの左サイドのツリーメニューでWeb and XML/XML Catalogをクリックする&lt;br /&gt;&lt;br /&gt;&lt;li&gt;XML Catalog Entriesの中でUser Specified EntriesをクリックしAddボタンを押す&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_OF_auIfbUdk/RyBVII6zIkI/AAAAAAAAABI/clXx1YiHPoU/s1600-h/1select_xml_catalog.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_OF_auIfbUdk/RyBVII6zIkI/AAAAAAAAABI/clXx1YiHPoU/s320/1select_xml_catalog.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5125189974269043266" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Add XML Catalog Entryダイアログを表示し下図の様に入力しOKボタンを押す&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_OF_auIfbUdk/RyBWao6zIlI/AAAAAAAAABQ/BFv56ASsR2I/s1600-h/2AddXMLCatalogEntry.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_OF_auIfbUdk/RyBWao6zIlI/AAAAAAAAABQ/BFv56ASsR2I/s320/2AddXMLCatalogEntry.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5125191391608250962" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;User Specified Entriesにhttp://www.zkoss.org/2005/zul/zul.xsdが表示されれば完了&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_OF_auIfbUdk/RyBXK46zImI/AAAAAAAAABY/LB-cPNuJwIQ/s1600-h/3select_xml_catalog.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_OF_auIfbUdk/RyBXK46zImI/AAAAAAAAABY/LB-cPNuJwIQ/s320/3select_xml_catalog.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5125192220536939106" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8907821310655746853-9045577168366732757?l=kemo-sah-bee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kemo-sah-bee.blogspot.com/feeds/9045577168366732757/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8907821310655746853&amp;postID=9045577168366732757' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/9045577168366732757'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/9045577168366732757'/><link rel='alternate' type='text/html' href='http://kemo-sah-bee.blogspot.com/2007/10/zk-eclipse.html' title='ZK: Eclipseセットアップ'/><author><name>木茂佐平</name><uri>http://www.blogger.com/profile/01091843968689405775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_OF_auIfbUdk/RyBPmY6zIjI/AAAAAAAAABA/_sCa3oYN12w/s72-c/xml_edit2.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8907821310655746853.post-5416374041758219965</id><published>2007-10-12T12:20:00.000+09:00</published><updated>2007-10-13T15:21:50.195+09:00</updated><title type='text'>ZK: Ruby on ZK を試す</title><content type='html'>ZK Forumで紹介されていた&lt;a href="http://sourceforge.net/forum/forum.php?thread_id=1834663&amp;forum_id=510208"&gt;Ruby on ZK&lt;/a&gt;を試してみました。&lt;br /&gt;とりあえずダウンロードしたrozk_r0.2.warを展開してみるとmySql.sqlなるファイルがあり、中身を確認するとテーブル作成ddlだったのでmysqlで実行してtestデータベースにテーブルを作成してみました。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt; $ cd ~/tmp&lt;br /&gt; $ unzip rozk_r.0.2.war&lt;br /&gt; $ mysql -u myadmin -p test&lt;br /&gt; Enter password:&lt;br /&gt; mysql&gt; \. mySql.sql&lt;br /&gt; ...&lt;br /&gt; mysql&gt; exit&lt;br /&gt; Bye&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;アプリケーションに必要なテーブルが作成できたと思い、rozk_r0.2.warをTOMCAT_DIR/webappsに配備後tomcatを再起動しました。&lt;br /&gt;tomcatにより展開されてできたアプリケーションディレクトリのcustomer.zulとinvoice.zulにmysqlユーザとパスワードの記述があるので実状に合わせ変更します。&lt;br /&gt;WEB-INF/libの中が空っぽなのでZKライブラリをコピーします。&lt;br /&gt;またWEB-INF/web.xmlが不完全なので動作しているZKアプリのweb.xmlをコピーしました。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt; $ diff customer.zul customer.zul~&lt;br /&gt; 8c8&lt;br /&gt; &lt; dbc=Dbc.new('test','MySql','myadmin','XXXXXX') &lt;br /&gt; ---&lt;br /&gt; &gt; dbc=Dbc.new('test','MySql','root','david') &lt;br /&gt;&lt;br /&gt; $ diff invoice.zul invoice.zul~&lt;br /&gt; 9c9&lt;br /&gt; &lt; dbc=Dbc.new('test','MySql','myadmin','XXXXXX') &lt;br /&gt; ---&lt;br /&gt; &gt; dbc=Dbc.new('test','MySql','root','david') &lt;br /&gt;&lt;br /&gt; # cp  zk-bin-3.0.0-RC/dist/lib/*jar TOMCAT_DIR/webapps/rozk_r0.2/WEB-INF/lib&lt;br /&gt;&lt;br /&gt; # cp zk-bin-3.0.0-RC/dist/lib/ext/*jar TOMCAT_DIR/webapps/rozk_r0.2/WEB-INF/lib&lt;br /&gt;&lt;br /&gt; # cd TOMCAT_DIR/webapps&lt;br /&gt; # cp ZKAPP_DIR/WEB-INF/web.xml rozk_r0.2/WEB-INF&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Firefoxでアクセスして見たところエラーです。&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_OF_auIfbUdk/Rw8PP3jjO1I/AAAAAAAAAAk/3UwQ74WN9z0/s1600-h/rozk-main-ng.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_OF_auIfbUdk/Rw8PP3jjO1I/AAAAAAAAAAk/3UwQ74WN9z0/s320/rozk-main-ng.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5120328066629057362" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;ワークディレクトリの設定がうまくいっていないようなのでrozk_r0.2/rozk/bl_init.rbを編集しアプリケーションのフルパスを記入してアクセスしてみたところ動作させることができました。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt; # vi bl_init.rb&lt;br /&gt;...&lt;br /&gt; else  # change the working directory to the webapps, if tomcat&lt;br /&gt; #  Dir.chdir('webapps'+work_path) # 'webapps/rozk_sample'&lt;br /&gt;   Dir.chdir('/usr/tomcat/webapps'+work_path) # 'webapps/rozk_sample'&lt;br /&gt; end&lt;br /&gt;...&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_OF_auIfbUdk/Rw8RVXjjO2I/AAAAAAAAAAs/YgG-Pai0XR8/s1600-h/rozk-main.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_OF_auIfbUdk/Rw8RVXjjO2I/AAAAAAAAAAs/YgG-Pai0XR8/s320/rozk-main.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5120330360141593442" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;どうやら&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;customer.zul&lt;br /&gt;...&lt;br /&gt;  # 他になんの設定もなしで&lt;br /&gt;  dbc=Dbc.new('test','MySql','myadmin','XXXXXX') &lt;br /&gt;  #データベースに接続し&lt;br /&gt; &lt;br /&gt;  # 他になんの設定もなしで&lt;br /&gt;  dao_cus = Dao.new(dbc,'cus','cus as Customer, name as Name, email as eMail','cus')&lt;br /&gt;  # DAOが出来上がり&lt;br /&gt;&lt;br /&gt;  # 生成されたDAOから自動的に&lt;br /&gt;  AutoGrid.dao_2_grid(dao_cus,$cus_form)&lt;br /&gt;  # DAO操作用のグリッドが作成されるようです!!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;ということは&lt;a href="http://kemo-sah-bee.blogspot.com/2007/09/ruby-ambition.html"&gt;ambitionを試す&lt;/a&gt;で作ったpetsテーブルの操作はこれだけでOK?&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;pet.zul&lt;br /&gt;  &amp;lt;?page zscript-language="Ruby"?&amp;gt;&lt;br /&gt;  &amp;lt;window &amp;gt;&lt;br /&gt;    &amp;lt;div id='pet_form'/&amp;gt; &lt;br /&gt;    &amp;lt;zscript src='rozk/bl_init.rb'/&amp;gt;&lt;br /&gt;    &amp;lt;zscript&amp;gt;&lt;br /&gt;      dbc=Dbc.new('sampledb','MySql','myadmin','XXXXXX')    &lt;br /&gt;      pets = Dao.new(dbc,'pets','id as ID, name as Name, age as Age','pets')&lt;br /&gt;      AutoGrid.dao_2_grid(pets,$pet_form)&lt;br /&gt;  &amp;lt;/zscript&amp;gt;&lt;br /&gt;  &amp;lt;/window&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;でした、面白いですね。&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_OF_auIfbUdk/Rw8wxnjjO3I/AAAAAAAAAA0/b236A-gxFOU/s1600-h/pet.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_OF_auIfbUdk/Rw8wxnjjO3I/AAAAAAAAAA0/b236A-gxFOU/s320/pet.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5120364930333358962" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;こちらも気に掛かります&lt;a href="http://d.hatena.ne.jp/higayasuo/"&gt;ひがやすをさんのブログ&lt;/a&gt;の&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;...&lt;br /&gt;来週出す予定のSeasar2の次のバージョン(2.4.18)で、S2Daoが統合されます。&lt;br /&gt;...&lt;br /&gt;目玉は、ManyToOne、OneToMany、OneToOneの完全サポートでしょうか。&lt;br /&gt;...&lt;br /&gt;&lt;pre&gt;&lt;br /&gt; List&lt;Employee&gt; employees =    &lt;br /&gt;jdbcManager.from(Employee.class).join("department").getResultList();&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;わくわくしますね。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8907821310655746853-5416374041758219965?l=kemo-sah-bee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kemo-sah-bee.blogspot.com/feeds/5416374041758219965/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8907821310655746853&amp;postID=5416374041758219965' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/5416374041758219965'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/5416374041758219965'/><link rel='alternate' type='text/html' href='http://kemo-sah-bee.blogspot.com/2007/10/zk-ruby-on-zk.html' title='ZK: Ruby on ZK を試す'/><author><name>木茂佐平</name><uri>http://www.blogger.com/profile/01091843968689405775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_OF_auIfbUdk/Rw8PP3jjO1I/AAAAAAAAAAk/3UwQ74WN9z0/s72-c/rozk-main-ng.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8907821310655746853.post-3779951534653937737</id><published>2007-10-08T15:58:00.001+09:00</published><updated>2007-10-08T16:25:40.862+09:00</updated><title type='text'>ZK: ブラウザを判別</title><content type='html'>WEBサイトにアクセスしてきたブラウザの種類は&lt;br /&gt;Executions.getCurrent().[isGecko(),isExplore(),isExplore7(),isSafari()]&lt;br /&gt;を使用して判別し、HTTPリクエストのユーザエージェント情報がそのまま欲しいときは&lt;br /&gt;HttpServletRequest)Executions.getCurrent().getNativeRequest()).getHeader("User-Agent")&lt;br /&gt;を使用して取得する。&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;window title="Client User Agent" border="normal" width="360px"&amp;gt;&lt;br /&gt;  &amp;lt;zscript&amp;gt;&lt;br /&gt;    import javax.servlet.http.HttpServletRequest;&lt;br /&gt;    void dispClientAgent(){&lt;br /&gt;       String agentInfo = ((HttpServletRequest)Executions.getCurrent().&lt;br /&gt;                            getNativeRequest()).getHeader("User-Agent"); &lt;br /&gt;       userAgent.value = agentInfo;&lt;br /&gt;    }&lt;br /&gt;  &amp;lt;/zscript&amp;gt;&lt;br /&gt;  &amp;lt;vbox&amp;gt;&lt;br /&gt;  &amp;lt;label value="Hello ZK!!"  id="userAgent"/&amp;gt;&lt;br /&gt;  &amp;lt;button label="ユーザエージェント情報を表示"  onClick="dispClientAgent()"/&amp;gt;&lt;br /&gt;  &amp;lt;/vbox&amp;gt;&lt;br /&gt;  &amp;lt;zscript&amp;gt;&lt;br /&gt;    if (Executions.getCurrent().isGecko()){&lt;br /&gt;      userAgent.value = "Firefoxでアクセス";&lt;br /&gt;    }else if (Executions.getCurrent().isExplorer()){&lt;br /&gt;      userAgent.value = "Explorerでアクセス";   &lt;br /&gt;    }else if (Executions.getCurrent().isExplorer7()){&lt;br /&gt;      userAgent.value = "Explorer 7でアクセス";   &lt;br /&gt;    }else if (Executions.getCurrent().isSafari()){&lt;br /&gt;      userAgent.value = "Safariでアクセス";  &lt;br /&gt;    }else {&lt;br /&gt;       userAgent.value = ".....";&lt;br /&gt;     }     &lt;br /&gt;  &amp;lt;/zscript&amp;gt;&lt;br /&gt;&amp;lt;/window&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8907821310655746853-3779951534653937737?l=kemo-sah-bee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kemo-sah-bee.blogspot.com/feeds/3779951534653937737/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8907821310655746853&amp;postID=3779951534653937737' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/3779951534653937737'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/3779951534653937737'/><link rel='alternate' type='text/html' href='http://kemo-sah-bee.blogspot.com/2007/10/zk.html' title='ZK: ブラウザを判別'/><author><name>木茂佐平</name><uri>http://www.blogger.com/profile/01091843968689405775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8907821310655746853.post-2154385863035153278</id><published>2007-09-30T22:05:00.000+09:00</published><updated>2007-10-06T14:42:46.300+09:00</updated><title type='text'>Ruby: ambition(2)テーブル結合</title><content type='html'>Rubyのコレクション系のメソッドがそのまま意味的に等価なSQLを生成し、データベースにアクセスするAmbitionって面白いですね。テーブル結合はどうなるのだろうと思いビートルズのディスコグラフィーを作って試してみました。&lt;br /&gt;まずはアルバムのデータ作成&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;create table albums(&lt;br /&gt;  id integer not null auto_increment,&lt;br /&gt;  name varchar(50),&lt;br /&gt;  year smallint,&lt;br /&gt;  primary key(id)&lt;br /&gt;);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;insert into albums(name, year)values('Please Please Me', 1963);&lt;br /&gt;insert into albums(name, year)values('With the Beatles', 1963);&lt;br /&gt;insert into albums(name, year)values('A Hard Day\'s Night', 1964);&lt;br /&gt;insert into albums(name, year)values('Beatles for Sale', 1964);&lt;br /&gt;insert into albums(name, year)values('Help!', 1965);&lt;br /&gt;insert into albums(name, year)values('Rubber Soul', 1965);&lt;br /&gt;insert into albums(name, year)values('Revolver', 1966);&lt;br /&gt;insert into albums(name, year)values('Sgt. Pepper\'s Lonly Hears Club Band', 1967);&lt;br /&gt;insert into albums(name, year)values('The Beatles', 1968);&lt;br /&gt;insert into albums(name, year)values('Yellow Submarine', 1969);&lt;br /&gt;insert into albums(name, year)values('Abbey Road', 1969);&lt;br /&gt;insert into albums(name, year)values('Let it Be', 1970);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;次は曲のデータ、「ビートルズがやってきた」までです。ぁ〜なつかしいな！！&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;create table songs(&lt;br /&gt;  id integer not null auto_increment,&lt;br /&gt;  name varchar(50),&lt;br /&gt;  album_id integer not null,&lt;br /&gt;  primary key(id),&lt;br /&gt;  foreign key(album_id) references albums(id)&lt;br /&gt;);&lt;br /&gt;&lt;br /&gt;insert into songs(name, album_id)values('I Saw Her Standing There', 1);&lt;br /&gt;insert into songs(name, album_id)values('Anna (Go to Him)', 1);&lt;br /&gt;insert into songs(name, album_id)values('Misery', 1);&lt;br /&gt;insert into songs(name, album_id)values('Boys', 1);&lt;br /&gt;insert into songs(name, album_id)values('Ask Me Why', 1);&lt;br /&gt;insert into songs(name, album_id)values('Please Please Me', 1);&lt;br /&gt;insert into songs(name, album_id)values('Love Me Do', 1);&lt;br /&gt;insert into songs(name, album_id)values('P.S. I Love Yoe', 1);&lt;br /&gt;insert into songs(name, album_id)values('Baby It\'s You', 1);&lt;br /&gt;insert into songs(name, album_id)values('Do You Want to Know a Secret', 1);&lt;br /&gt;insert into songs(name, album_id)values('A Taste of Honey', 1);&lt;br /&gt;insert into songs(name, album_id)values('There\'s a Place', 1);&lt;br /&gt;insert into songs(name, album_id)values('Twist and Shout', 1);&lt;br /&gt;&lt;br /&gt;insert into songs(name, album_id)values('It Won\'t Be Long', 2);&lt;br /&gt;insert into songs(name, album_id)values('All I\'ve Got To Do', 2);&lt;br /&gt;insert into songs(name, album_id)values('All My Loving', 2);&lt;br /&gt;insert into songs(name, album_id)values('Don\'t Bother Me', 2);&lt;br /&gt;insert into songs(name, album_id)values('Little Child', 2);&lt;br /&gt;insert into songs(name, album_id)values('Till There Was You', 2);&lt;br /&gt;insert into songs(name, album_id)values('Please Mister Postman', 2);&lt;br /&gt;insert into songs(name, album_id)values('Roll Over Beethoven', 2);&lt;br /&gt;insert into songs(name, album_id)values('Hold Me Tight', 2);&lt;br /&gt;insert into songs(name, album_id)values('You Really Got A Hold On Me', 2);&lt;br /&gt;insert into songs(name, album_id)values('I Wanna Be Your Man', 2);&lt;br /&gt;insert into songs(name, album_id)values('Devil I Her Heart', 2);&lt;br /&gt;insert into songs(name, album_id)values('Not A Second Time', 2);&lt;br /&gt;insert into songs(name, album_id)values('Money', 2);&lt;br /&gt;&lt;br /&gt;insert into songs(name, album_id)values('A Hard Day\'s Night', 3);&lt;br /&gt;insert into songs(name, album_id)values('I Should Have Known Better', 3);&lt;br /&gt;insert into songs(name, album_id)values('If I Fell', 3);&lt;br /&gt;insert into songs(name, album_id)values('I\'m Happy Just to Dance With You', 3);&lt;br /&gt;insert into songs(name, album_id)values('And I Love Her', 3);&lt;br /&gt;insert into songs(name, album_id)values('Tell Me Why', 3);&lt;br /&gt;insert into songs(name, album_id)values('Can\'t Buy Me Love', 3);&lt;br /&gt;insert into songs(name, album_id)values('Any Time At All', 3);&lt;br /&gt;insert into songs(name, album_id)values('I\'ll Cry Instead', 3);&lt;br /&gt;insert into songs(name, album_id)values('Things We Said Today', 3);&lt;br /&gt;insert into songs(name, album_id)values('When I Get Home', 3);&lt;br /&gt;insert into songs(name, album_id)values('You Can\'t Do That', 3);&lt;br /&gt;insert into songs(name, album_id)values('I\'ll Be Back', 3);&lt;br /&gt;&lt;/pre&gt;                                                         &lt;br /&gt;&lt;br /&gt;スクリプトを作成し実行してみます。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;require 'rubygems'&lt;br /&gt;require 'active_record'&lt;br /&gt;require 'ambition'&lt;br /&gt;&lt;br /&gt;ActiveRecord::Base.establish_connection(&lt;br /&gt;  :adapter =&gt; 'mysql',&lt;br /&gt;  :database =&gt; 'sampledb',&lt;br /&gt;  :host =&gt; 'localhost',&lt;br /&gt;  :username =&gt; 'myadmin',&lt;br /&gt;  :password =&gt; 'xxxxxx'&lt;br /&gt;)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# テーブルが複数形なのに対してクラスは単数形&lt;br /&gt;class Album &lt; ActiveRecord::Base&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;class Song &lt; ActiveRecord::Base&lt;br /&gt;  belongs_to :album&lt;br /&gt;  def to_s&lt;br /&gt;    return sprintf("%-30s [%s]", name, album.name)&lt;br /&gt;  end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;puts Song.select{|s| s.album.name =~ 'Please%'}&lt;br /&gt;  #SELECT * FROM songs JOIN album WHERE albums.name LIKE 'Please%'&lt;br /&gt;  # SQL変ですね!!&lt;br /&gt;&lt;br /&gt;Song.select{|s| s.album.name =~ 'Please%'}.each{|s| print s, s.album.year, "\n"}&lt;br /&gt;  #I Saw Her Standing There       [Please Please Me]1963&lt;br /&gt;  #Anna (Go to Him)               [Please Please Me]1963&lt;br /&gt;  #Misery                         [Please Please Me]1963&lt;br /&gt;  #Boys                           [Please Please Me]1963&lt;br /&gt;  #Ask Me Why                     [Please Please Me]1963&lt;br /&gt;  #Please Please Me               [Please Please Me]1963&lt;br /&gt;  #Love Me Do                     [Please Please Me]1963&lt;br /&gt;...&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;to_sで出力されたSQLは変ですが、 DBへはきちんとアクセスしているみたいです???&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8907821310655746853-2154385863035153278?l=kemo-sah-bee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kemo-sah-bee.blogspot.com/feeds/2154385863035153278/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8907821310655746853&amp;postID=2154385863035153278' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/2154385863035153278'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/2154385863035153278'/><link rel='alternate' type='text/html' href='http://kemo-sah-bee.blogspot.com/2007/09/ruby-ambition2.html' title='Ruby: ambition(2)テーブル結合'/><author><name>木茂佐平</name><uri>http://www.blogger.com/profile/01091843968689405775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8907821310655746853.post-6733202695839111920</id><published>2007-09-30T11:46:00.000+09:00</published><updated>2007-10-01T08:43:45.620+09:00</updated><title type='text'>Ruby: ambitionを試す</title><content type='html'>Rubyのブロックで条件指定するとSQLを作成する&lt;a href="http://errtheblog.com/post/10722"&gt;Ambition&lt;/a&gt;なるものを試してみました。&lt;br /&gt;とりあえずActiveRecordだけあればよさげですが、今回はRails一式をインストールしてから試してみました。&lt;br /&gt;使用するデータベースはMySQLです。&lt;br /&gt;&lt;br /&gt;まずはAmbitionのインストール&lt;br /&gt;&lt;pre&gt;&lt;br /&gt; $ sudo gem install ambition -y&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;次にMySQLにお試しテーブルを作成します。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ mysql -u myadmin -p sampledb&lt;br /&gt;mysql&gt; \. pet.sql&lt;br /&gt;...&lt;br /&gt;mysql&gt;exit;&lt;br /&gt;Bye&lt;br /&gt;&lt;br /&gt;$ cat pet.sql&lt;br /&gt;create table pets(&lt;br /&gt;  id integer not null auto_increment,&lt;br /&gt;  name varchar(20),&lt;br /&gt;  age smallint,&lt;br /&gt;  primary key(id)&lt;br /&gt;);&lt;br /&gt;&lt;br /&gt;insert into pets(name, age)values('Hanako', 13);&lt;br /&gt;insert into pets(name, age)values('Wan-taro', 15);&lt;br /&gt;insert into pets(name, age)values('Pochi', 3);&lt;br /&gt;insert into pets(name, age)values('Shiro', 8);&lt;br /&gt;insert into pets(name, age)values('Tama', 4);&lt;br /&gt;insert into pets(name, age)values('Tora', 2);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;さっそくAmbitionを試しましょう&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;require 'rubygems'&lt;br /&gt;require 'active_record'&lt;br /&gt;require 'ambition'&lt;br /&gt;&lt;br /&gt;ActiveRecord::Base.establish_connection(&lt;br /&gt;  :adapter =&gt; 'mysql',&lt;br /&gt;  :database =&gt; 'sampledb',&lt;br /&gt;  :host =&gt; 'localhost',&lt;br /&gt;  :username =&gt; 'myadmin',&lt;br /&gt;  :password =&gt; 'xxxxxxx'&lt;br /&gt;)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# petテーブルに対応するクラス　テーブルが複数形なのに対してクラスは単数形&lt;br /&gt;class Pet &lt; ActiveRecord::Base&lt;br /&gt;  def to_s&lt;br /&gt;      return "name:#{name} age:#{age} "&lt;br /&gt;  end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;# Rubyの条件でSQLが作成されます&lt;br /&gt;puts Pet.select{|p| p.name == 'Hanako'}&lt;br /&gt;  #SELECT * FROM pets WHERE pets.`name` = 'Hanako'&lt;br /&gt;&lt;br /&gt;puts Pet.select{|p| p.name =~ '%ako%'}&lt;br /&gt;  #SELECT * FROM pets WHERE pets.`name` LIKE '%ako%'&lt;br /&gt;&lt;br /&gt;# MySQLは正規表現も使えるんですね&lt;br /&gt;puts Pet.select{|p| p.name =~ /ako/}&lt;br /&gt;  #SELECT * FROM pets WHERE pets.`name` REGEXP 'ako'&lt;br /&gt;&lt;br /&gt;puts Pet.sort_by{|p| [p.age, p.name]}&lt;br /&gt;  #SELECT * FROM pets ORDER BY pets.age, pets.name&lt;br /&gt;&lt;br /&gt;# テーブルにアクセスし年齢でソートして画面に出力&lt;br /&gt;Pet.sort_by{|p| p.age}.each{|p| puts p}&lt;br /&gt;  #name:Mie age:2 &lt;br /&gt;  #name:Pochi age:3 &lt;br /&gt;  #name:Tama age:4 &lt;br /&gt;  #name:Shiro age:8 &lt;br /&gt;  #name:Hanako age:13 &lt;br /&gt;  #name:Wan-taro age:15 &lt;br /&gt;&lt;br /&gt;# データベースに接続されていなくても構わないようです&lt;br /&gt;pets = [Pet.new(:name =&gt; 'Foo', :age =&gt; 2), &lt;br /&gt;　　　　Pet.new(:name =&gt;'Bar', :age =&gt; 11)],&lt;br /&gt;        Pet.new(:name =&gt; 'Baz', :age =&gt; 7))]&lt;br /&gt;&lt;br /&gt;Pet.ambition_source = pets&lt;br /&gt;# 年齢を降順にソート&lt;br /&gt;Pet.sort_by{|p| -p.age}.each{|p| puts p}&lt;br /&gt;  #name:Bar age:11 &lt;br /&gt;  #name:Baz age:7 &lt;br /&gt;  #name:Foo age:2 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# ambition_source を nilに戻すと再びデータベースへアクセスします&lt;br /&gt;Pet.ambition_source = nil&lt;br /&gt;Pet.sort_by{|p| p.age}.each{|p| puts p}&lt;br /&gt;  #name:Mie age:2 &lt;br /&gt;  #name:Pochi age:3 &lt;br /&gt;  #name:Tama age:4 &lt;br /&gt;  #name:Shiro age:8 &lt;br /&gt;  #name:Hanako age:13 &lt;br /&gt;  #name:Wan-taro age:15 &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;なんかいい感じですね！！JRubyで動作しないのが残念です。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8907821310655746853-6733202695839111920?l=kemo-sah-bee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kemo-sah-bee.blogspot.com/feeds/6733202695839111920/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8907821310655746853&amp;postID=6733202695839111920' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/6733202695839111920'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/6733202695839111920'/><link rel='alternate' type='text/html' href='http://kemo-sah-bee.blogspot.com/2007/09/ruby-ambition.html' title='Ruby: ambitionを試す'/><author><name>木茂佐平</name><uri>http://www.blogger.com/profile/01091843968689405775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8907821310655746853.post-854140626946558492</id><published>2007-09-29T14:55:00.000+09:00</published><updated>2007-09-29T15:24:47.274+09:00</updated><title type='text'>ZK: XMLエディタをデフォルトエディタに設定</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_OF_auIfbUdk/Rv3t6smYdZI/AAAAAAAAAAc/SGUF7oVpiCg/s1600-h/eclipse-zul.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://2.bp.blogspot.com/_OF_auIfbUdk/Rv3t6smYdZI/AAAAAAAAAAc/SGUF7oVpiCg/s320/eclipse-zul.png" alt="" id="BLOGGER_PHOTO_ID_5115506344423093650" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Eclipseでzulファイルの編集にXMLエディタをデフォルトエディタとして使用するように設定するには、Eclipseメニューの「ウィンドウ」-&gt;「設定」で設定画面を表示する。&lt;br /&gt;ファイルの関連付け画面を表示し、ファイルタイプの中から*.zulをクリックする。&lt;br /&gt;関連づけられたエディターの中からXMLエディターを選択し「デフォルト」ボタンをクリックするとXMLエディタがzulファイルのデフォルトエディタに設定される。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8907821310655746853-854140626946558492?l=kemo-sah-bee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kemo-sah-bee.blogspot.com/feeds/854140626946558492/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8907821310655746853&amp;postID=854140626946558492' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/854140626946558492'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/854140626946558492'/><link rel='alternate' type='text/html' href='http://kemo-sah-bee.blogspot.com/2007/09/zk-xml.html' title='ZK: XMLエディタをデフォルトエディタに設定'/><author><name>木茂佐平</name><uri>http://www.blogger.com/profile/01091843968689405775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_OF_auIfbUdk/Rv3t6smYdZI/AAAAAAAAAAc/SGUF7oVpiCg/s72-c/eclipse-zul.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8907821310655746853.post-668901021137497959</id><published>2007-09-29T14:35:00.000+09:00</published><updated>2007-09-29T14:40:17.704+09:00</updated><title type='text'>ZK: ボタンのテキストアライン設定</title><content type='html'>CSSを使用してボタンのテキストアラインの設定が可能です。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;window title="ボタンのテキストアライン設定" border="normal" width="500px"&amp;gt;&lt;br /&gt;&amp;lt;vbox&amp;gt;&lt;br /&gt;  &amp;lt;button label="hello" style="width:200px;text-align:left"/&amp;gt;            &lt;br /&gt;  &amp;lt;button label="hello" style="width:200px;text-align:right"/&amp;gt;              &lt;br /&gt;  &amp;lt;button label="hello" style="width:200px;text-align:center"/&amp;gt;        &lt;br /&gt;&amp;lt;/vbox&amp;gt;&lt;br /&gt;&amp;lt;/window&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8907821310655746853-668901021137497959?l=kemo-sah-bee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kemo-sah-bee.blogspot.com/feeds/668901021137497959/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8907821310655746853&amp;postID=668901021137497959' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/668901021137497959'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/668901021137497959'/><link rel='alternate' type='text/html' href='http://kemo-sah-bee.blogspot.com/2007/09/zk_29.html' title='ZK: ボタンのテキストアライン設定'/><author><name>木茂佐平</name><uri>http://www.blogger.com/profile/01091843968689405775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8907821310655746853.post-39267226371173440</id><published>2007-09-28T18:18:00.000+09:00</published><updated>2007-09-29T10:18:21.732+09:00</updated><title type='text'>ZK: アプリでボタンのサイズを統一</title><content type='html'>CSS使用してアプリケーションの全てのボタンのサイズ同じに設定可能です。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;window title="アプリのボタンサイズを統一する" border="normal" width="500px"&amp;gt;&lt;br /&gt;&amp;lt;style&amp;gt; &lt;br /&gt;   .fixwidth{&lt;br /&gt;     width:200px; &lt;br /&gt;   } &lt;br /&gt;&amp;lt;/style&amp;gt; &lt;br /&gt;&amp;lt;vbox&amp;gt;  &lt;br /&gt;  &amp;lt;button label="ADD" sclass="fixwidth"/&amp;gt; &lt;br /&gt;  &amp;lt;button label="DELETE" sclass="fixwidth"/&amp;gt;  &lt;br /&gt;&amp;lt;/vbox&amp;gt; &lt;br /&gt;&amp;lt;/window&amp;gt; &lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8907821310655746853-39267226371173440?l=kemo-sah-bee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kemo-sah-bee.blogspot.com/feeds/39267226371173440/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8907821310655746853&amp;postID=39267226371173440' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/39267226371173440'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/39267226371173440'/><link rel='alternate' type='text/html' href='http://kemo-sah-bee.blogspot.com/2007/09/zk.html' title='ZK: アプリでボタンのサイズを統一'/><author><name>木茂佐平</name><uri>http://www.blogger.com/profile/01091843968689405775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8907821310655746853.post-6217665869403092951</id><published>2007-09-19T16:46:00.000+09:00</published><updated>2007-11-21T12:48:01.444+09:00</updated><title type='text'>ZK: JNDI接続</title><content type='html'>&lt;p&gt;WEBアプリケーションはJDBC接続を通じてリモートのRDBMSにアクセスする。この際クライアントアプリケーションとRDBMSサーバの間にはTCP/IPを介し物理的にJDBC接続が確立されるがデータベースと物理的に接続を確立するには大きなCPUパワーが必要で時間もかかる。このためHTTPリクエストの度にアプリケーションとRDBMSの間で物理的に接続、切断を行うことはパフォーマンスに大きな影響がでる。そこでアプリケーションサーバはシステム起動時にデータベースとの物理的な接続をプールし、データベースとの接続を必要とするアプリケーションはールマネージャを介しデータベースに論理的に接続するようにする。そしてデータベース使い終えたアプリケーションは論理的に接続を切断し、プールマネージャは次のデータベース接続要求を待つことになる。&lt;br /&gt;--だそうです&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;blockquote&gt;JNDIとはJava Naming and Directory Interfaceの頭文字を取ったもので、Javaから&lt;br/&gt;* ネーミング・サービス&lt;br/&gt;* ディレクトリー・サービス&lt;br/&gt;扱うためのインターフェイスを規定した仕様です。&lt;br/&gt;&lt;br /&gt;&lt;a href="http://www-06.ibm.com/jp/software/websphere/developer/was/jndi/1.html"&gt;*詳しくは「今さら人に聞けないJNDI」&lt;/a&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt; Fedor Core 6 でハマッタ&lt;br/&gt; /etc/hostsに 127.0.0.1 localhost エントリが無い!!&lt;br/&gt;$ cat /etc/hosts &lt;br /&gt;&lt;pre&gt; # Do not remove the following line, or various programs&lt;br /&gt; # that require network functionality will fail.&lt;br /&gt; ::1     localhost.localdomain   localhost&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br/&gt; &lt;br /&gt;JNDI接続ではlocalhostが127.0.0.1に解決できないとデータベース接続できないようだ。&lt;br/&gt; ブラウザからはlocalhost:8080で アドレス解決できるし、SpringやSeasarでもホスト名にはlocalhostを使用していて問題なかったので気づくのに時間がかかった。&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;動作環境確認&lt;br /&gt; &lt;li&gt;OS Fedora Core 6&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Java jdk1.5.0_09&lt;/li&gt;&lt;br /&gt;  /usr/java/jdk1.5.0_09へインストールし、シンボリックリンク/usr/java/jdk作成&lt;br /&gt;  $JAVA_HOME=/usr/java/jdk    $CLASSPATH=.:/usr/java/jdk/jre/lib:/usr/java/jdk/lib:/usr/java/jdk/lib/tools.jar&lt;br /&gt; &lt;li&gt;MySQL 5.20.27&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Tomcat apache-tomcat-5.5.20 &lt;/li&gt;&lt;br /&gt;  /usr/apache-tomcat-5.5.20へインストールし、シンボリックリンク/usr/tomcat作成&lt;br /&gt; &lt;li&gt;Eclipse 3.2(wtp-all-in-one)&lt;/li&gt;&lt;br /&gt; &lt;li&gt;ZK 2.4&lt;/li&gt;&lt;br /&gt;  ZKライブラリの配置&lt;br/&gt;アーカイブを展開してできたディレクトリdist/libとdist/lib/ext内の全てのjarファイルをEclipseのライブラリとして取り込む。&lt;br /&gt; &lt;li&gt;/usr/tomcat/common/libへ配置したjarファイル&lt;/li&gt;&lt;br /&gt;   MySQL JDBCドライバ mysql-connector-java-5.0.4-bin.jar&lt;br /&gt;   commons-pool-1.3.jar&lt;br /&gt;   commons-collections-3.2.jar&lt;br /&gt;   commons-dbcp-1.2.1.jar&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt; Tomcat用JNDIリソース mysql/hellodb を設定する&lt;/li&gt;&lt;br /&gt;&lt;pre&gt; ($TOMCAT_DIR/conf/context.xml)&lt;br /&gt;&amp;lt;Context  reloadable="true"&amp;gt; &lt;br /&gt;  &amp;lt;Resource &lt;br /&gt;    name="mysql/hellodb" &lt;br /&gt;    username="myadmin"&lt;br /&gt;    password="*********"&lt;br /&gt;    url="jdbc:mysql://localhost:3306/hellodb"&lt;br /&gt;    auth="Container" &lt;br /&gt;    defaultAutocommit="false"&lt;br /&gt;    driverClassName="com.mysql.jdbc.Driver"&lt;br /&gt;    type="javax.sql.DataSource"&lt;br /&gt;    maxActive="20"&lt;br /&gt;    maxIdle="30000"&lt;br /&gt;    maxWait="100"&lt;br /&gt;  /&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/Context&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;(Eclipseプロジェクトではcontext.xmlは$PROJECT_HOME/WebContent/META-INF/に配置する)&lt;br /&gt;&lt;br /&gt;&lt;li&gt; アプリケーションで使用するJNDIリソースmysql/hellodbを定義する&lt;/li&gt;&lt;br /&gt;&lt;pre&gt; (WEB-INF/web.xml)&lt;br /&gt;&lt;br /&gt; &amp;lt;resource-ref&amp;gt;&lt;br /&gt;   &amp;lt;res-ref-name&amp;gt;mysql/hellodb&amp;lt;/res-ref-name&amp;gt;&lt;br /&gt;   &amp;lt;res-type&amp;gt;javax.sql.Datasource&amp;lt;/red-type&amp;gt;&lt;br /&gt;   &amp;lt;res-auth&amp;gt;Container&amp;lt;/res-auth&amp;gt;&lt;br /&gt; &amp;lt;/resource-ref&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt; Bean作成&lt;/li&gt;&lt;br /&gt;&lt;pre&gt; (my.Emp.java)&lt;br /&gt;&lt;br /&gt; public class Emp {&lt;br /&gt;   private int  empno;&lt;br /&gt;   private String ename;&lt;br /&gt;   private String job;&lt;br /&gt;   &lt;br /&gt;  public Emp(int empno, String ename, String job){&lt;br /&gt;    this.empno = empno;&lt;br /&gt;    this.ename = ename;&lt;br /&gt;    this.job = job;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public int getEmpno() {&lt;br /&gt;    return empno;&lt;br /&gt;  }&lt;br /&gt;  public void setEmpno(int empno) {&lt;br /&gt;    this.empno = empno;&lt;br /&gt;  }&lt;br /&gt;  ... 残りのフィールドのgettter、setter メソッド省略 &lt;br /&gt; }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt; アプリケーションからデータソースを参照するクラスを作成&lt;/li&gt;&lt;br /&gt;&lt;pre&gt; (my.EmpManager.java)&lt;br /&gt;   &lt;br /&gt; public class EmpManager {&lt;br /&gt;   public List findAll() throws Exception {&lt;br /&gt;     DataSource ds = (DataSource)new InitialContext()&lt;br /&gt;        .lookup("java:comp/env/mysql/hellodb");&lt;br /&gt;&lt;br /&gt;     Connection conn = null;&lt;br /&gt;     Statement stmt = null;&lt;br /&gt;     ResultSet rs = null;&lt;br /&gt;&lt;br /&gt;     List results = new LinkedList();&lt;br /&gt;     try {&lt;br /&gt;       conn = ds.getConnection();&lt;br /&gt;       stmt = conn.createStatement();&lt;br /&gt;       rs = stmt.executeQuery("select EMPNO, ENAME, JOB from EMP");&lt;br /&gt;       while (rs.next()) {&lt;br /&gt;         int empno = rs.getInt("EMPNO");&lt;br /&gt;         String ename = rs.getString("ENAME");&lt;br /&gt;         String job = rs.getString("JOB");&lt;br /&gt;         results.add(new Emp(empno, ename, job));&lt;br /&gt;       }&lt;br /&gt;       return results;&lt;br /&gt;     } finally {&lt;br /&gt;        if (rs != null) try{ rs.close(); } catch (SQLException ex){}&lt;br /&gt;        if (stmt != null) try{stmt.close();} catch (SQLException ex){}&lt;br /&gt;        if (conn != null) try(conn.close();} catch (SQLException ex){}&lt;br /&gt;     }&lt;br /&gt;   }&lt;br /&gt; }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt; ビュー作成&lt;/li&gt;&lt;br /&gt;&lt;pre&gt; (conn-pool1.zul)&lt;br /&gt;&lt;br /&gt; &amp;lt;window title="Connection Pooling Demo 1" border="normal"&amp;gt;&lt;br /&gt;   &amp;lt;zscript&amp;gt;&lt;br /&gt;&lt;br /&gt;      import my.EmpManager;&lt;br /&gt;      emps = new EmpManager().findAll();&lt;br /&gt;   &amp;lt;/zscript&amp;gt;&lt;br /&gt;   &amp;lt;listbox id="empList" width="800px"&amp;gt;&lt;br /&gt;     &amp;lt;listhead&amp;gt;&lt;br /&gt;        &amp;lt;listheader label="Empno" /&amp;gt;&lt;br /&gt;        &amp;lt;listheader label="Name" /&amp;gt;&lt;br /&gt;        &amp;lt;listheader label="Job"/&amp;gt;&lt;br /&gt;&lt;br /&gt;     &amp;lt;/listhead&amp;gt;&lt;br /&gt;     &amp;lt;listitem value="${each.empno}" forEach="${emps}"&amp;gt;&lt;br /&gt;       &amp;lt;listcell label="${each.empno}" /&amp;gt;&lt;br /&gt;       &amp;lt;listcell label="${each.ename}" /&amp;gt;&lt;br /&gt;       &amp;lt;listcell label="${each.job}" /&amp;gt;  &lt;br /&gt;    &amp;lt;/listitem&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;/listbox&amp;gt;&lt;br /&gt;&amp;lt;/window&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;li&gt;インターフェース Initiatorの実装&lt;/li&gt; &lt;br /&gt;org.zkoss.ak.ui.util.Initiatorを実装しinitディレクティブを使用することでzulファイルにJavaコードを記述せずにデータロードが可能になる。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;Eclipseメニュー &lt;br /&gt; +-ファイル&lt;br /&gt;     +-新規&lt;br /&gt;        +-その他&lt;br /&gt;            +-クラス&lt;br /&gt;&lt;br /&gt;パッケージ: my&lt;br /&gt;名前: AllEmpFinder&lt;br /&gt;&lt;br /&gt;インターフェース &lt;br /&gt;[追加] &lt;br /&gt;&lt;br /&gt;インターフェースを選択してください: org.zkoss.ak.ui.util.Initiator&lt;br /&gt;[OK]&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt; 作成されたテンプレートを編集&lt;/li&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;public void doInit(Page arg0, Object[] arg1) throws Exception {&lt;br /&gt;  try {&lt;br /&gt;     arg0.setVariable((String)arg1[0], new EmpManager().findAll());&lt;br /&gt;   } catch (Exception ex){&lt;br /&gt;     throw UiException.Aide.wrap(ex);&lt;br /&gt;   }&lt;br /&gt; }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt; ビュー作成 &lt;/li&gt;&lt;br /&gt;&lt;pre&gt;(conn-pool2.zul)&lt;br /&gt;&lt;br /&gt;&amp;lt;window title="Connection Pooling Demo 2" border="normal"&amp;gt;&lt;br /&gt;&amp;lt;?init class="my.AllEmpFinder" arg0="emps"?&amp;gt;&lt;br /&gt;... 以降はconn-pool1.zulに同じ&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8907821310655746853-6217665869403092951?l=kemo-sah-bee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kemo-sah-bee.blogspot.com/feeds/6217665869403092951/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8907821310655746853&amp;postID=6217665869403092951' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/6217665869403092951'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/6217665869403092951'/><link rel='alternate' type='text/html' href='http://kemo-sah-bee.blogspot.com/2007/09/zk-jndi.html' title='ZK: JNDI接続'/><author><name>木茂佐平</name><uri>http://www.blogger.com/profile/01091843968689405775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8907821310655746853.post-5552481716296719927</id><published>2007-09-11T17:31:00.000+09:00</published><updated>2007-09-14T13:00:22.521+09:00</updated><title type='text'>ZKアプリから最も簡単にJDBC接続するには</title><content type='html'>&lt;blockquote&gt;&lt;br /&gt;ZKアプリから最も簡単にJDBC接続するにはJDBCの入門書にあるようにjava.sql.DriverManagerを使用する方法がある。データベースへの接続といったコストのかかる処理は効率的に行われるべきなので、この方法は簡単ではあるが勧められるものではない。&lt;br /&gt;--そうです。&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;MySQLデータベースhellodbにあるnameとemailの二つのカラムを持つテーブルusersへデータ登録するアプリケーションを作成する。&lt;br /&gt;&lt;br /&gt;jdbc-demo.zul&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;window title="JDBC demo" border="normal"&amp;gt;&lt;br /&gt;  &amp;lt;zscript&amp;gt;&lt;br /&gt;  import java.sql.*;&lt;br /&gt;  void submit() {&lt;br /&gt;     //ドライバをロードしデータベースに接続する。&lt;br /&gt;     Class.forName("com.mysql.jdbc.Driver");&lt;br /&gt;     Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/hellodb?user=myadmin&amp;amp;amp;password=********");&lt;br /&gt;     PreparedStatement stmt = null;&lt;br /&gt;     try {&lt;br /&gt;        stmt = conn.prepareStatement("INSERT INTO users values(?, ?)");&lt;br /&gt;        //ユーザ入力をステートメントにセットする&lt;br /&gt;        stmt.setString(1, name.value);&lt;br /&gt;        stmt.setString(2, email.value);&lt;br /&gt;        //ステートメントを実行&lt;br /&gt;        stmt.executeUpdate();&lt;br /&gt;     } finally { //クリーンアップ作業&lt;br /&gt;        if (stmt != null) {&lt;br /&gt;           try {&lt;br /&gt;               stmt.close();&lt;br /&gt;           } catch (SQLException ex) {&lt;br /&gt;            //   log.error(ex); //log and ignore&lt;br /&gt;           }&lt;br /&gt;         }&lt;br /&gt;         if (conn != null) {&lt;br /&gt;            try {&lt;br /&gt;               conn.close();&lt;br /&gt;            } catch (SQLException ex) {&lt;br /&gt;             //  log.error(ex); //log and ignore&lt;br /&gt;            }&lt;br /&gt;         }&lt;br /&gt;     }&lt;br /&gt;  }&lt;br /&gt;  &amp;lt;/zscript&amp;gt;&lt;br /&gt;  &amp;lt;vbox&amp;gt;&lt;br /&gt;&lt;br /&gt;     &amp;lt;hbox&amp;gt;Name : &amp;lt;textbox id="name"/&amp;gt;&amp;lt;/hbox&amp;gt;&lt;br /&gt;     &amp;lt;hbox&amp;gt;Email: &amp;lt;textbox id="email"/&amp;gt;&amp;lt;/hbox&amp;gt;&lt;br /&gt;     &amp;lt;button label="submit" onClick="submit()"/&amp;gt;&lt;br /&gt;  &amp;lt;/vbox&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/window&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;お終い&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8907821310655746853-5552481716296719927?l=kemo-sah-bee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kemo-sah-bee.blogspot.com/feeds/5552481716296719927/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8907821310655746853&amp;postID=5552481716296719927' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/5552481716296719927'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/5552481716296719927'/><link rel='alternate' type='text/html' href='http://kemo-sah-bee.blogspot.com/2007/09/zkjdbc.html' title='ZKアプリから最も簡単にJDBC接続するには'/><author><name>木茂佐平</name><uri>http://www.blogger.com/profile/01091843968689405775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8907821310655746853.post-805730563623822272</id><published>2007-08-29T11:09:00.000+09:00</published><updated>2007-09-14T12:36:41.248+09:00</updated><title type='text'>ZK: Fileupload サイズ制限の変更</title><content type='html'>ZKではアップロードできるファイルサイズはデフォルトで5120kbに制限されている。WEB-INF/zk.xml(オプション)を作成しsystem-configエレメント内のmax-upload-sizeエレメントでキロバイト単位でアップロード可能なファイルサイズを変更できる。max-upload-sizeが負の場合アップロードするファイルサイズに制限がなくなる。(ZK The Developer's Reference)&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;system-config&amp;gt;&lt;br /&gt;  &amp;lt;max-upload-size&amp;gt;10240&amp;lt;/max-upload-size&amp;gt;&lt;br /&gt;&amp;lt;/system-config&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8907821310655746853-805730563623822272?l=kemo-sah-bee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kemo-sah-bee.blogspot.com/feeds/805730563623822272/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8907821310655746853&amp;postID=805730563623822272' title='1 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/805730563623822272'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/805730563623822272'/><link rel='alternate' type='text/html' href='http://kemo-sah-bee.blogspot.com/2007/08/zk-fileupload_29.html' title='ZK: Fileupload サイズ制限の変更'/><author><name>木茂佐平</name><uri>http://www.blogger.com/profile/01091843968689405775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8907821310655746853.post-4729850163384868479</id><published>2007-08-28T15:33:00.000+09:00</published><updated>2007-09-14T12:37:11.008+09:00</updated><title type='text'>ZK: CSSでグリッドヘッダの色を変更</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_OF_auIfbUdk/RtPCML2NoKI/AAAAAAAAAAU/2ieSoBmTjIg/s1600-h/grid-header.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_OF_auIfbUdk/RtPCML2NoKI/AAAAAAAAAAU/2ieSoBmTjIg/s320/grid-header.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5103636317335298210" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;window title="Grid Header" border="normal"&amp;gt;&lt;br /&gt;&amp;lt;style&amp;gt; &lt;br /&gt;div.grid-head th{ &lt;br /&gt;background-color: red; &lt;br /&gt;} &lt;br /&gt;&amp;lt;/style&amp;gt; &lt;br /&gt;&amp;lt;grid &amp;gt;&lt;br /&gt;  &amp;lt;columns&amp;gt;&lt;br /&gt;    &amp;lt;column width="150px" label="Author"/&amp;gt;&lt;br /&gt;   &amp;lt;column width="300px" label="Title"/&amp;gt;&lt;br /&gt;   &amp;lt;column width="150px" label="Manufacturer"/&amp;gt;&lt;br /&gt;   &amp;lt;column width="100px" label="ProductGroup"/&amp;gt;&lt;br /&gt;  &amp;lt;/columns&amp;gt;&lt;br /&gt;  &amp;lt;rows&amp;gt;&lt;br /&gt;   &amp;lt;row&amp;gt;&lt;br /&gt;     &amp;lt;label value="Sidney Sheldon"/&amp;gt;&lt;br /&gt;     &amp;lt;label value="Master of the Game"/&amp;gt;&lt;br /&gt;     &amp;lt;label value="Warner Books"/&amp;gt;&lt;br /&gt;     &amp;lt;label value="Book"/&amp;gt;&lt;br /&gt;   &amp;lt;/row&amp;gt;&lt;br /&gt;...&lt;br /&gt;&amp;lt;/rows&amp;gt;&lt;br /&gt;&amp;lt;/grid&amp;gt;&lt;br /&gt;&amp;lt;/window&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8907821310655746853-4729850163384868479?l=kemo-sah-bee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kemo-sah-bee.blogspot.com/feeds/4729850163384868479/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8907821310655746853&amp;postID=4729850163384868479' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/4729850163384868479'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/4729850163384868479'/><link rel='alternate' type='text/html' href='http://kemo-sah-bee.blogspot.com/2007/08/zk-css.html' title='ZK: CSSでグリッドヘッダの色を変更'/><author><name>木茂佐平</name><uri>http://www.blogger.com/profile/01091843968689405775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_OF_auIfbUdk/RtPCML2NoKI/AAAAAAAAAAU/2ieSoBmTjIg/s72-c/grid-header.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8907821310655746853.post-4719029487778661007</id><published>2007-08-28T13:31:00.000+09:00</published><updated>2007-09-14T12:37:37.729+09:00</updated><title type='text'>ZK: Fileuploadデモ</title><content type='html'>http://commons.apache.orgよりcommons-fileupload-1.2-bin.tar.gz及びcommons-io-1.3.2-bin.tar.gzをダウンロード。ダウンロードしたファイルを展開しcommons-fileupload-1.2.jarとcommons-io-1.3.2.jarをアプリケーション/WEB-INF/libへ配置する。&lt;br /&gt;&lt;br /&gt;EclipseではWEB-INF/libを選択し右クリックしメニューを表示&lt;br /&gt;Importメニューよりjarファイルをプロジェクトにインポートする。&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;window title="fileupload demo" border="normal"&amp;gt;&lt;br /&gt;  &amp;lt;button label="Upload"&amp;gt;&lt;br /&gt;    &amp;lt;attribute name="onClick"&amp;gt;{&lt;br /&gt;      Object media = Fileupload.get();&lt;br /&gt;      if (media instanceof org.zkoss.image.Image) {&lt;br /&gt;        Image image = new Image();&lt;br /&gt;        image.setContent(media);&lt;br /&gt;        image.setParent(pics);&lt;br /&gt;      } else if (media != null)&lt;br /&gt;        Messagebox.show("Not an image: "+media, "Error", &lt;br /&gt;                         Messagebox.OK, Messagebox.ERROR);&lt;br /&gt;    }&lt;br /&gt;    &amp;lt;/attribute&amp;gt;&lt;br /&gt;  &amp;lt;/button&amp;gt;&lt;br /&gt;  &amp;lt;vbox id="pics"/&amp;gt;&lt;br /&gt;&amp;lt;/window&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8907821310655746853-4719029487778661007?l=kemo-sah-bee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kemo-sah-bee.blogspot.com/feeds/4719029487778661007/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8907821310655746853&amp;postID=4719029487778661007' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/4719029487778661007'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/4719029487778661007'/><link rel='alternate' type='text/html' href='http://kemo-sah-bee.blogspot.com/2007/08/zk-fileupload.html' title='ZK: Fileuploadデモ'/><author><name>木茂佐平</name><uri>http://www.blogger.com/profile/01091843968689405775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8907821310655746853.post-23191070947535096</id><published>2007-08-23T11:26:00.000+09:00</published><updated>2007-09-14T12:38:11.800+09:00</updated><title type='text'>ZK: マウスオーバーでpopup表示</title><content type='html'>「ボタン上にマウスカーソルが来るとバルーンヘルプのように時刻をポップアップ表示させる。」&lt;br /&gt;マウスオーバーでポップアップ表示させたいpopupコンポーネントのIDをボタンのtooltip属性に設定する。popupコンポーネントのonOpenイベントハンドラはRubyで実装した。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;window title="ツールチップ表示" border="normal" width="360px"&amp;gt;&lt;br /&gt;  &amp;lt;zscript language="ruby"&amp;gt;&lt;br /&gt;     def popup_open&lt;br /&gt;       $lbltime.value = Time.now.strftime("%H:%M:%S")&lt;br /&gt;     end&lt;br /&gt;  &amp;lt;/zscript&amp;gt;&lt;br /&gt;  &amp;lt;button label="マウスオーバーで時刻をポップアップ表示" &lt;br /&gt;           tooltip="any"/&amp;gt;&lt;br /&gt;     &amp;lt;popup id="any"  onOpen="ruby: popup_open"&amp;gt;  &lt;br /&gt;        &amp;lt;label id="lbltime"/&amp;gt;&lt;br /&gt;     &amp;lt;/popup &amp;gt;&lt;br /&gt;&amp;lt;/window&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8907821310655746853-23191070947535096?l=kemo-sah-bee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kemo-sah-bee.blogspot.com/feeds/23191070947535096/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8907821310655746853&amp;postID=23191070947535096' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/23191070947535096'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/23191070947535096'/><link rel='alternate' type='text/html' href='http://kemo-sah-bee.blogspot.com/2007/08/zk-popup.html' title='ZK: マウスオーバーでpopup表示'/><author><name>木茂佐平</name><uri>http://www.blogger.com/profile/01091843968689405775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8907821310655746853.post-7583498650562383459</id><published>2007-08-23T09:59:00.000+09:00</published><updated>2007-09-14T12:38:35.468+09:00</updated><title type='text'>ZK:onMouseOver,onMouseOutイベント</title><content type='html'>マウスカーソルがボタンの上に来たらボタンの文字を赤くし、カーソルがボタンから外れたらボタンの文字を黒くする。&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;window title="Customizable Tooltips" border="normal" width="360px"&amp;gt;&lt;br /&gt;&amp;lt;script type="text/JavaScript" &amp;gt;&lt;br /&gt;   function red(el){ &lt;br /&gt;     el.style.color = "red";  &lt;br /&gt;   }&lt;br /&gt;   function black(el){ &lt;br /&gt;     el.style.color = "black";&lt;br /&gt;  }  &lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;button label="Info" &lt;br /&gt;     action="onMouseOver:red(this);onMouseOut:black(this)"&amp;gt;&lt;br /&gt;&amp;lt;/button&amp;gt; &lt;br /&gt;&amp;lt;/window&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8907821310655746853-7583498650562383459?l=kemo-sah-bee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kemo-sah-bee.blogspot.com/feeds/7583498650562383459/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8907821310655746853&amp;postID=7583498650562383459' title='1 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/7583498650562383459'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/7583498650562383459'/><link rel='alternate' type='text/html' href='http://kemo-sah-bee.blogspot.com/2007/08/zkonmouseoveronmouseout.html' title='ZK:onMouseOver,onMouseOutイベント'/><author><name>木茂佐平</name><uri>http://www.blogger.com/profile/01091843968689405775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8907821310655746853.post-7540021335137599017</id><published>2007-08-01T14:54:00.000+09:00</published><updated>2007-09-14T12:58:49.324+09:00</updated><title type='text'>ZK: SVGを使う</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_OF_auIfbUdk/RrAqX6yAQxI/AAAAAAAAAAM/6a5Wi2YHgbs/s1600-h/use-svg.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_OF_auIfbUdk/RrAqX6yAQxI/AAAAAAAAAAM/6a5Wi2YHgbs/s320/use-svg.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5093617768960377618" /&gt;&lt;/a&gt;&lt;br /&gt;ZKでSVGを使用するにはhtmlコンポーネントの中でembedタグ、またはobjectタグを使用する方法またはiframeタグを使う方法がある。&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;a href="http://ja.wikipedia.org/wiki/Scalable_Vector_Graphics"&gt;Scalable Vector Graphics（SVG、スケーラブル ベクター グラフィックス&lt;/a&gt;は、XMLによって記述されたベクターグラフィック言語のこと、或いは、SVGで記述された画像フォーマットのこと。W3Cでオープン標準として勧告されている。...だそうです。&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;use-svg.zul&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;window title="Test SVG" border="normal" width="500px"&amp;gt; &lt;br /&gt;&amp;lt;html&amp;gt;&lt;br /&gt;&amp;lt;attribute name="content"&amp;gt; &lt;br /&gt;&amp;lt;![CDATA[&lt;br /&gt; &amp;lt;embed  src="rectangle.svg" width="300" height="100"&lt;br /&gt;     type="image/svg+xml" &lt;br /&gt;   pluginspage="http://www.adobe.com/svg/viewer/install/"&amp;gt; &amp;lt;/embed&amp;gt;&lt;br /&gt; ]]&amp;gt;&lt;br /&gt;&amp;lt;/attribute&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;br /&gt;&amp;lt;iframe src="circle1.svg"/&amp;gt;&lt;br /&gt;&amp;lt;/window&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;rectangle.svg&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" standalone="no"?&amp;gt;&lt;br /&gt;&amp;lt;!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" &lt;br /&gt;"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;svg width="100%" height="100%" version="1.1"&lt;br /&gt;xmlns="http://www.w3.org/2000/svg"&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;circle cx="100" cy="50" r="40" stroke="black"&lt;br /&gt;stroke-width="2" fill="red"/&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/svg&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8907821310655746853-7540021335137599017?l=kemo-sah-bee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kemo-sah-bee.blogspot.com/feeds/7540021335137599017/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8907821310655746853&amp;postID=7540021335137599017' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/7540021335137599017'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/7540021335137599017'/><link rel='alternate' type='text/html' href='http://kemo-sah-bee.blogspot.com/2007/08/zk-svg.html' title='ZK: SVGを使う'/><author><name>木茂佐平</name><uri>http://www.blogger.com/profile/01091843968689405775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_OF_auIfbUdk/RrAqX6yAQxI/AAAAAAAAAAM/6a5Wi2YHgbs/s72-c/use-svg.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8907821310655746853.post-891643155027073054</id><published>2007-07-31T15:56:00.000+09:00</published><updated>2007-09-14T12:39:18.297+09:00</updated><title type='text'>Tuigwaaコメントプラグインのカスタマイズ</title><content type='html'>Tuigwaaのコメントプラグインのタグはinput/textのためコメントの入力欄は1行しかないがtextareaタグを使用し複数行入力可能にする方法を発見した。&lt;br /&gt;&lt;br /&gt;classes/org/seasar/tuigwaa/plugin/database/CommentView.vm&lt;br /&gt;を編集しコメント入力用のタグをinputからtextareaに変更すればよい。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;...&lt;br /&gt;&amp;lt;input type="text" name="postingUser" size="15" maxsize="15"/&amp;gt;&lt;br /&gt;&amp;lt;!--&lt;br /&gt;&amp;lt;input type="text" name="comment" size="70" maxsize="70"/&amp;gt;&lt;br /&gt;--&amp;gt;&lt;br /&gt;&amp;lt;br/&amp;gt;&lt;br /&gt;&amp;lt;textarea name="comment" cols=50 rows=3&amp;gt;&amp;lt;/textarea&amp;gt;&lt;br /&gt;...&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8907821310655746853-891643155027073054?l=kemo-sah-bee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kemo-sah-bee.blogspot.com/feeds/891643155027073054/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8907821310655746853&amp;postID=891643155027073054' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/891643155027073054'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/891643155027073054'/><link rel='alternate' type='text/html' href='http://kemo-sah-bee.blogspot.com/2007/07/tuigwaa_31.html' title='Tuigwaaコメントプラグインのカスタマイズ'/><author><name>木茂佐平</name><uri>http://www.blogger.com/profile/01091843968689405775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8907821310655746853.post-1870567314758596056</id><published>2007-07-23T13:29:00.000+09:00</published><updated>2007-09-14T12:39:48.451+09:00</updated><title type='text'>ZK: Rubyでの制約</title><content type='html'>&lt;a href="http://sourceforge.net/forum/forum.php?thread_id=1764681&amp;forum_id=510208"&gt;ROZK - Ruby on ZK very simple tools for build &lt;br /&gt;&lt;/a&gt;&lt;br /&gt;ZKフレームワークでRubyを使用する場合データバインディングなどで制約がある。&lt;br /&gt;例えば&lt;a href="http://www.zkoss.org/smalltalks/timebox/timebox.dsp"&gt;Using Timebox Component&lt;/a&gt;のソースのスクリプトでDateオブジェクトを生成しアノテーションでtimeboxの値にセットしているが、RubyスクリプトでTimeオブジェクトを生成したときはアノテーションはnullになってしまう。関数コールのようにruby:プレフィックスをつけネームスペースを変えてみたがエラーとなった。現状ではRubyオブジェクトはアノテーションで使えない事を頭に入れておこう。&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;zscript&amp;gt;&lt;br /&gt;  import java.text.SimpleDateFormat;&lt;br /&gt;  import java.util.Date;&lt;br /&gt;&lt;br /&gt;  SimpleDateFormat format = new SimpleDateFormat("HH:mm");&lt;br /&gt;  Date date = format.parse("23:59");&lt;br /&gt;&amp;lt;/zscript&amp;gt;&lt;br /&gt;&amp;lt;!--  &amp;lt;zscript  language="ruby"&amp;gt;&lt;br /&gt;  date = Time.mktime(1970, 1, 1, 23, 59)&lt;br /&gt;  # RubyオブジェクトはZUMLアノテーション${date}で参照できない&lt;br /&gt;&amp;lt;/zscript&amp;gt; --&amp;gt;&lt;br /&gt;&amp;lt;window title="Time Value(Date)" width="300px" border="normal"&amp;gt;&lt;br /&gt;  &amp;lt;timebox id="tb0" value="${date}" /&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8907821310655746853-1870567314758596056?l=kemo-sah-bee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kemo-sah-bee.blogspot.com/feeds/1870567314758596056/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8907821310655746853&amp;postID=1870567314758596056' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/1870567314758596056'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/1870567314758596056'/><link rel='alternate' type='text/html' href='http://kemo-sah-bee.blogspot.com/2007/07/zk-ruby_23.html' title='ZK: Rubyでの制約'/><author><name>木茂佐平</name><uri>http://www.blogger.com/profile/01091843968689405775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8907821310655746853.post-2303858680674590061</id><published>2007-07-21T10:51:00.001+09:00</published><updated>2007-09-14T12:40:12.698+09:00</updated><title type='text'>ZK: イベントハンドラにruby関数</title><content type='html'>ZKフレームワークではスクリプト言語にrubyを使うことができる。ruby関数をZKコンポーネントのイベントハンドラとして呼び出すときはruby関数の名前の前にruby:をつけること。&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;window title="sample" border="normal"&amp;gt;&lt;br /&gt;&amp;lt;zscript  language='ruby'&amp;gt;&lt;br /&gt;def button1_clicked&lt;br /&gt;  $t.value = $self.label&lt;br /&gt;end&lt;br /&gt;&amp;lt;/zscript&amp;gt;&lt;br /&gt;&amp;lt;button onClick="ruby: button1_clicked" label="button1"/&amp;gt; &lt;br /&gt;&amp;lt;label id="t" value="label"/&amp;gt;&lt;br /&gt;&amp;lt;/window&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8907821310655746853-2303858680674590061?l=kemo-sah-bee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kemo-sah-bee.blogspot.com/feeds/2303858680674590061/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8907821310655746853&amp;postID=2303858680674590061' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/2303858680674590061'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/2303858680674590061'/><link rel='alternate' type='text/html' href='http://kemo-sah-bee.blogspot.com/2007/07/zk-ruby_21.html' title='ZK: イベントハンドラにruby関数'/><author><name>木茂佐平</name><uri>http://www.blogger.com/profile/01091843968689405775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8907821310655746853.post-5026978118665431015</id><published>2007-07-20T14:07:00.000+09:00</published><updated>2007-07-21T11:11:26.053+09:00</updated><title type='text'>ZK: vflexモールド付きのdivコンポーネント</title><content type='html'>&lt;a href="http://sourceforge.net/forum/forum.php?thread_id=1780927&amp;forum_id=510209"&gt;Div with vflex&lt;/a&gt;&lt;br /&gt;mold="vflex"を追加しブラウザ画面の空いている高さにあわせていっぱいになるよう高さを自動調整するDivコンポーネント。&lt;br /&gt;&lt;br /&gt;真ん中のウィンドウはブラウザの空いている部分を埋めるように高さを調整して表示される。&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;?page id="mainPage" title="Hello" ?&amp;gt;  &lt;br /&gt;&amp;lt;zk&amp;gt; &lt;br /&gt;&amp;lt;window border="normal" title="window"&amp;gt;&lt;br /&gt;This is my header window &lt;br /&gt;&amp;lt;/window&amp;gt;&lt;br /&gt;&amp;lt;window border="normal" title="window"&amp;gt; &lt;br /&gt;&amp;lt;div mold="vflex"&amp;gt;&lt;br /&gt;This is my my content window &lt;br /&gt;&amp;lt;/div&amp;gt; &lt;br /&gt;&amp;lt;/window&amp;gt; &lt;br /&gt;&amp;lt;window border="normal" title="window"&amp;gt; &lt;br /&gt;This is my footer window &lt;br /&gt;&amp;lt;/window&amp;gt; &lt;br /&gt;&amp;lt;/zk&amp;gt; &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8907821310655746853-5026978118665431015?l=kemo-sah-bee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kemo-sah-bee.blogspot.com/feeds/5026978118665431015/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8907821310655746853&amp;postID=5026978118665431015' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/5026978118665431015'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/5026978118665431015'/><link rel='alternate' type='text/html' href='http://kemo-sah-bee.blogspot.com/2007/07/zk-vflexdiv.html' title='ZK: vflexモールド付きのdivコンポーネント'/><author><name>木茂佐平</name><uri>http://www.blogger.com/profile/01091843968689405775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8907821310655746853.post-4931564125340888770</id><published>2007-07-20T14:03:00.001+09:00</published><updated>2007-07-20T14:49:58.326+09:00</updated><title type='text'>Yui-Ext Grid (Ext JS)をZKフレームワークで利用する。</title><content type='html'>&lt;a href="http://www.zkoss.org/smalltalks/yuiextz-grid-1/yuiextz-grid-1.dsp"&gt;Integrating Yui-Ext into ZK Framework&lt;/a&gt;&lt;br /&gt;&lt;div&gt;Yui-Ext Grid (Y-Grid)の特徴&lt;/div&gt;&lt;br /&gt;*マウスが行の上に来ると色が変化&lt;br /&gt;*複数行選択が可能&lt;br /&gt;*列でソート機能&lt;br /&gt;*列の表示、非表示が選択可能&lt;br /&gt;*列のリサイズ、移動が可能&lt;br /&gt;*列の固定&lt;br /&gt;&lt;br /&gt;利用法:&lt;br /&gt;Y-Gridコンポーネントを利用するときはネームスペースで標準の&lt;br /&gt;コンポーネントと区別すること。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;window ... y="http://www.zkoss.org/2007/yui"&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;後はコンポーネントにプレフィックスy:付けるだけでY-Gridコンポーネントとして使用可能になる&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8907821310655746853-4931564125340888770?l=kemo-sah-bee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kemo-sah-bee.blogspot.com/feeds/4931564125340888770/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8907821310655746853&amp;postID=4931564125340888770' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/4931564125340888770'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/4931564125340888770'/><link rel='alternate' type='text/html' href='http://kemo-sah-bee.blogspot.com/2007/07/yui-ext-grid-ext-jszk.html' title='Yui-Ext Grid (Ext JS)をZKフレームワークで利用する。'/><author><name>木茂佐平</name><uri>http://www.blogger.com/profile/01091843968689405775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8907821310655746853.post-6449237622148916278</id><published>2007-07-13T09:47:00.000+09:00</published><updated>2007-07-17T08:26:42.641+09:00</updated><title type='text'>tuigwaaアプリ引越</title><content type='html'>新しくセットアップしたホストに既存のtuigwaaサイトを再配備する。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://tuigwaa.sandbox.seasar.org/"&gt;WebUDA Tuigwaaとは&lt;/a&gt;&lt;br /&gt;&lt;blockquote&gt;tuigwaa (とぅいがー) とは、HTML タグを知らない人が、&lt;br /&gt;専門知識や特別な環境なしにブラウザだけでデータベースと連動する&lt;br /&gt;Webアプリケーションを作るツールです。新しいジャンルのミドルウェアとして、&lt;br /&gt;WebUDA(ユーザ主導型Webアプリケーション作成ツール)と名づけました。&lt;br /&gt;--だそうです&lt;br /&gt;&lt;/blockquote&gt;ホスト環境&lt;br /&gt;&lt;ul&gt;&lt;li&gt;OS: Redhat EL 4&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Java: JDK1.5.0.12&lt;/li&gt;&lt;li&gt;Tomcat: 5.5.23&lt;/li&gt;&lt;li style="text-align: left;"&gt;Tuigwaa: 1.0.4&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;◎ JavaサイトよりJDK5.0 Update12をダウンロードしインストール&lt;/span&gt;&lt;br /&gt;ダウンロードしたファイルに実行属性を付け実行すると使用許諾&lt;br /&gt;が表示される、最後までスクロールしyesで同意すると&lt;br /&gt;/usr/java/jdk1.5.0_12にJDK5.0がインストールされる。&lt;br /&gt;インストールディレクトリにシンボリックリンクjdkを作成しておく。&lt;br /&gt;環境変数JAVA_HOMEとCLASSPATHを設定しPATHに&lt;br /&gt;$JAVA_HOME/binを追加する。&lt;br /&gt;&lt;blockquote&gt;$ chmod +x jdk-1_5_0_12-linux-i586-rmp.bin&lt;br /&gt;$ su&lt;br /&gt;# ./jdk-1_5_0_12-linux-i586-rmp.bin&lt;br /&gt;# cd /usr/java&lt;br /&gt;# ln -s  jdk1.5.0_12  jdk&lt;br /&gt;$ vi .bash_profile&lt;br /&gt;JAVA_HOME=/usr/java/jdk&lt;br /&gt;PATH=$JAVA_HOME/bin:$PATH&lt;br /&gt;CLASSPATH=.:$JAVA_HOME/jre/lib:/$JAVA_HOME/lib:\&lt;br /&gt;    /$JAVA_HOME/lib/tools.jar&lt;br /&gt;export JAVA_HOME CLASSPATH PATH&lt;br /&gt;$ . .bash_profile&lt;br /&gt;&lt;/blockquote&gt;    &lt;span style="font-weight: bold;"&gt;◎TomcatダウンロードページよりTomcat5.5.23をダウンロードしインストール&lt;/span&gt;&lt;br /&gt;ダウンロードしたファイルを/usrディレクトリへ展開しシンボリックリンクを作成後Tomcatを起動してみる。&lt;br /&gt;&lt;blockquote&gt;# cd /usr&lt;br /&gt;# tar xfvz /tmp/apache-tomcat-5.5.23.tar.gz&lt;br /&gt;# ln -s apache-tomcat-5.5.23 tomcat&lt;br /&gt;# tomcat/bin/startup.sh&lt;br /&gt;&lt;/blockquote&gt;&lt;span style="font-weight: bold;"&gt;◎Tuigwaaのインストール&lt;br /&gt;&lt;/span&gt;tuigwaa-1.0.4.zipをダウンロードし作業ディレクトリで展開する。&lt;br /&gt;インストール方法は&lt;a href="http://tuigwaa.sandbox.seasar.org/start/quickstart_single.html"&gt;ここに&lt;/a&gt;詳しく説明されているので参照のこと、コマンド操作のみを記述する。&lt;br /&gt;&lt;blockquote&gt;$ unzip tuigwaa-1.0.4.zip&lt;br /&gt;# cp  jaas.conf /usr/tomcat/conf&lt;br /&gt;# cp tuigwaa.xml /usr/tomcat/conf/Catalina/localhost&lt;br /&gt;# cp tuigwaa.war /usr/tomcat/webapps&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;/usr/tomcat/bin/startup.shを編集しCATALINA_OPTSを追加する&lt;br /&gt;export CATALINA_OPTS=&lt;br /&gt;"-Djava.security.auth.login.config=/usr/tomcat/conf/jaas.conf"&lt;br /&gt;&lt;br /&gt;Tomcatを再起動しブラウザでhttp://localhost:8080/tuigwaaにアクセスできればインストール成功。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;◎既存のtuigwaaサイトを新しいホストに配備する&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;旧ホストのTuigwaa Managerにアクセスしサイト管理・サイト一覧より再配備するサイトを選び一括ダウンロードする。&lt;/li&gt;&lt;li&gt;新ホストのTuigwaa Managerにアクセスしユーザー管理で旧ホストのサイトで作成していたユーザとロールを登録する。&lt;/li&gt;&lt;li&gt;Tuigwaa Managerのサイト管理・サイト一覧ページのサイトのアップロードでダウンロードしたtgwarファイルを指定してアップロードする。&lt;br /&gt;&lt;/li&gt;&lt;li&gt;アップロードするサイトのファイルサイズが2Mを超えている場合はusr/tomcat/webapps/tuigwaa/WEB-INF/struts-config-tgw-manager.xmlを編集し制限を緩和する。具体的にはstruts-config-tgw-manager.xmlの277行目のmaxFileSize="2M"を適切な値に設定すればよい。&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8907821310655746853-6449237622148916278?l=kemo-sah-bee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kemo-sah-bee.blogspot.com/feeds/6449237622148916278/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8907821310655746853&amp;postID=6449237622148916278' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/6449237622148916278'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8907821310655746853/posts/default/6449237622148916278'/><link rel='alternate' type='text/html' href='http://kemo-sah-bee.blogspot.com/2007/07/tuigwaa.html' title='tuigwaaアプリ引越'/><author><name>木茂佐平</name><uri>http://www.blogger.com/profile/01091843968689405775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
