2007年10月26日金曜日

ZK: zulスキーマを使いzulファイルを生成する

Eclipe環境がセットアップできたのでzulファイルを作ってみました。
  • Project ExplorerでプロジェクトのWebContentディレクトリを選択しメニューを表示する


  • メニューからNew/Otherを選択しSelect a wizardダイアログを表示しXML/XMLを選択しNextボタンを押す


  • XML Fileダイアログを開きFile nameにhelloworld.zulを入力しNextボタンを押す


  • XML file作成方法選択ダイアログが開くのでCreate XML file form an XML schema file を選択しNextボタンを押す


  • スキーマファイル選択ダイアログの中からhttp//www.zkoss.org/2005/zul/zul.xsdを選択しNextボタンを押す


  • 私の場合、ルートエレメントはwindowにしたい


  • p:プレフィックスが鬱陶しいのでEditボタンを押しprefixを消す


  • helloworld.zulが生成され、コンポーネント名やアトリビュート名の入力補完が可能になりました
  • 2007年10月25日木曜日

    ZK: Eclipseセットアップ

    ZK How-Tosを参考にEclipse3.3.1へZK開発環境をセットアップした時のメモです。

    [OS] Fedora Core 6
    [Java] jdk1.5.0_09
    [Eclipse] wtp-all-in-one-sdk-linux-gtk

    zulファイルをXMLファイルとして扱う



  • EclipseのWindowメニューをクリック

  • Preferencesを選択しPreferencesダイアログを開く

  • ダイアログの左サイドのツリーメニューでGeneral/Content Typesをクリック

  • Content TypesペインでText/XMLを選択しAddボタンを押しNew File Typeダイアログを開く

  • File Typeに*.zulを入力しOKボタンを押す。


    zul.xsdスキーマのセットアップ


    zul.xsdをセットアップすることでコンポーネント名やアトリビュートの入力補完が可能になります。

  • Window/PreferencesメニューをクリックしPreferencesダイアログを開く

  • ダイアログの左サイドのツリーメニューでWeb and XML/XML Catalogをクリックする

  • XML Catalog Entriesの中でUser Specified EntriesをクリックしAddボタンを押す


  • Add XML Catalog Entryダイアログを表示し下図の様に入力しOKボタンを押す


  • User Specified Entriesにhttp://www.zkoss.org/2005/zul/zul.xsdが表示されれば完了
  • 2007年10月12日金曜日

    ZK: Ruby on ZK を試す

    ZK Forumで紹介されていたRuby on ZKを試してみました。
    とりあえずダウンロードしたrozk_r0.2.warを展開してみるとmySql.sqlなるファイルがあり、中身を確認するとテーブル作成ddlだったのでmysqlで実行してtestデータベースにテーブルを作成してみました。

    $ cd ~/tmp
    $ unzip rozk_r.0.2.war
    $ mysql -u myadmin -p test
    Enter password:
    mysql> \. mySql.sql
    ...
    mysql> exit
    Bye

    アプリケーションに必要なテーブルが作成できたと思い、rozk_r0.2.warをTOMCAT_DIR/webappsに配備後tomcatを再起動しました。
    tomcatにより展開されてできたアプリケーションディレクトリのcustomer.zulとinvoice.zulにmysqlユーザとパスワードの記述があるので実状に合わせ変更します。
    WEB-INF/libの中が空っぽなのでZKライブラリをコピーします。
    またWEB-INF/web.xmlが不完全なので動作しているZKアプリのweb.xmlをコピーしました。

    $ diff customer.zul customer.zul~
    8c8
    < dbc=Dbc.new('test','MySql','myadmin','XXXXXX')
    ---
    > dbc=Dbc.new('test','MySql','root','david')

    $ diff invoice.zul invoice.zul~
    9c9
    < dbc=Dbc.new('test','MySql','myadmin','XXXXXX')
    ---
    > dbc=Dbc.new('test','MySql','root','david')

    # cp zk-bin-3.0.0-RC/dist/lib/*jar TOMCAT_DIR/webapps/rozk_r0.2/WEB-INF/lib

    # cp zk-bin-3.0.0-RC/dist/lib/ext/*jar TOMCAT_DIR/webapps/rozk_r0.2/WEB-INF/lib

    # cd TOMCAT_DIR/webapps
    # cp ZKAPP_DIR/WEB-INF/web.xml rozk_r0.2/WEB-INF

    Firefoxでアクセスして見たところエラーです。


    ワークディレクトリの設定がうまくいっていないようなのでrozk_r0.2/rozk/bl_init.rbを編集しアプリケーションのフルパスを記入してアクセスしてみたところ動作させることができました。

    # vi bl_init.rb
    ...
    else # change the working directory to the webapps, if tomcat
    # Dir.chdir('webapps'+work_path) # 'webapps/rozk_sample'
    Dir.chdir('/usr/tomcat/webapps'+work_path) # 'webapps/rozk_sample'
    end
    ...



    どうやら

    customer.zul
    ...
    # 他になんの設定もなしで
    dbc=Dbc.new('test','MySql','myadmin','XXXXXX')
    #データベースに接続し

    # 他になんの設定もなしで
    dao_cus = Dao.new(dbc,'cus','cus as Customer, name as Name, email as eMail','cus')
    # DAOが出来上がり

    # 生成されたDAOから自動的に
    AutoGrid.dao_2_grid(dao_cus,$cus_form)
    # DAO操作用のグリッドが作成されるようです!!



    ということはambitionを試すで作ったpetsテーブルの操作はこれだけでOK?

    pet.zul
    <?page zscript-language="Ruby"?>
    <window >
    <div id='pet_form'/>
    <zscript src='rozk/bl_init.rb'/>
    <zscript>
    dbc=Dbc.new('sampledb','MySql','myadmin','XXXXXX')
    pets = Dao.new(dbc,'pets','id as ID, name as Name, age as Age','pets')
    AutoGrid.dao_2_grid(pets,$pet_form)
    </zscript>
    </window>



    でした、面白いですね。



    こちらも気に掛かりますひがやすをさんのブログ

    ...
    来週出す予定のSeasar2の次のバージョン(2.4.18)で、S2Daoが統合されます。
    ...
    目玉は、ManyToOne、OneToMany、OneToOneの完全サポートでしょうか。
    ...

    List employees =
    jdbcManager.from(Employee.class).join("department").getResultList();



    わくわくしますね。

    2007年10月8日月曜日

    ZK: ブラウザを判別

    WEBサイトにアクセスしてきたブラウザの種類は
    Executions.getCurrent().[isGecko(),isExplore(),isExplore7(),isSafari()]
    を使用して判別し、HTTPリクエストのユーザエージェント情報がそのまま欲しいときは
    HttpServletRequest)Executions.getCurrent().getNativeRequest()).getHeader("User-Agent")
    を使用して取得する。


    <window title="Client User Agent" border="normal" width="360px">
    <zscript>
    import javax.servlet.http.HttpServletRequest;
    void dispClientAgent(){
    String agentInfo = ((HttpServletRequest)Executions.getCurrent().
    getNativeRequest()).getHeader("User-Agent");
    userAgent.value = agentInfo;
    }
    </zscript>
    <vbox>
    <label value="Hello ZK!!" id="userAgent"/>
    <button label="ユーザエージェント情報を表示" onClick="dispClientAgent()"/>
    </vbox>
    <zscript>
    if (Executions.getCurrent().isGecko()){
    userAgent.value = "Firefoxでアクセス";
    }else if (Executions.getCurrent().isExplorer()){
    userAgent.value = "Explorerでアクセス";
    }else if (Executions.getCurrent().isExplorer7()){
    userAgent.value = "Explorer 7でアクセス";
    }else if (Executions.getCurrent().isSafari()){
    userAgent.value = "Safariでアクセス";
    }else {
    userAgent.value = ".....";
    }
    </zscript>
    </window>