投稿

3月, 2006の投稿を表示しています

Tapestry Engine Service

イメージ
Tapestry4になって、Engine Serviceの記述方法ががらっと変わりました。 Tapestry3では、application specificationに記述をしましたが、Tapestry4では、HiveMindに設定をします。 以下の設定では、dataSqueezerや、Engine Service内でVisitオブジェクトを使用したいため、サービスを追加しています。 hivemodule.xml <contribution configuration-id="tapestry.state.ApplicationObjects"><state-object name="AppVisit" scope="session"><create-instance class="jp.co.taosoftware.tagraw.tape.AppVisit" /></state-object></contribution><contribution configuration-id="tapestry.services.ApplicationServices"><service name="SessionService" object="service:SessionService"/></contribution><service-point id="SessionService" interface="org.apache.tapestry.engine.IEngineService"><invoke-factory><construct class="jp.co.taosoftware.tagraw.service.SessionService"><set-object property="exceptionReporter" value="infrastructure:requestExcept

iBatisで動的SQL

イメージ
iBatisで動的なSQLを発行する方法ですが、sqlMap.xmlの内容を編集するだけです。 以下に簡単な例をあげておきます。(sqlMap内のselectタグだけ記載しています) <select id=”getUser2″ resultMap=”resultUser”> SELECT ID AS id, NAME AS name FROM USER_TABLE <dynamic prepend=”WHERE”> <isGreaterThan property=”id” compareValue=”0″> ID=#id# <isGreaterThan> </dynamic> </select>

Tapestry JavaScript (3)

イメージ
TapestryのScriptテンプレートで使用可能な残りのエレメントについて解説したいと思います。 if 名前そのままで、条件式を書くことにより、特定のJavaScriptを出力する、出力しないの指定が可能になります。 スクリプトテンプレートファイル <input-symbol key="historyList" class="java.util.List" required="yes"/><if expression="hitoryList">alert("historyList is true");</if> expressionにオブジェクトを指定するとnullの時false、それ以外の時trueになります。 もちろんhistoryListの型を、java.lang.booleanにしての条件分岐も可能です。 if-not 上記したifの逆の条件文を記述します。 スクリプトテンプレートファイル <if-not expression="hitoryList">alert("historyList is false");</if-not> include-script 外部JavaScriptファイルの読み込み指定をします。 複数のコンポーネントで使用するロジックは極力外部JavaScriptに集めブラウザのキャッシュを有効にさせる事でデータ転送量を少なくする事が可能になります。 スクリプトテンプレートファイル <script><include-script resource-path="../../taglist.js" />...</script> パスは、jwcファイルからの相対パス。もしくは/からの絶対パスを指定します。 上記の例では、WEB-INF/jwc/taglist.jwcに配置していますので、ブラウザが読み込み可能な位置(WEB-INFより上位ディレクトリ)にtaglist.jsを配置しています。 HTML出力結果 <body><script type="text/

JavaScript非互換 JSONデータ

イメージ
Ajax等はやっており、色々作成しているのですが、JSON (JavaScript Object Notation)データを扱っていて、JavaScriptでの配列の非互換性を発見しました。 データが悪いと言ってしまえばそれまでなのですが、JavaScriptを直すのではなく、データを直す必要があるので、原因を追究するのに時間がかかります。頭の隅にでもとどめておくと良いと思います。 サンプルコード 以下のソースをIEとFireFoxで実行してみると異なった結果となります。 <html><body><script language="JavaScript" type="text/javascript" ><!--var dataArray = [{'name':'1','data':'data1'},{'name':'2','data':'data2'},{'name':'3','data':'data3'},{'name':'4','data':'data4'},];var length = dataArray.length;document.write("length= " + length);document.write("<br/>");for (var i=0; i<length;i++){document.write(" name=" + dataArray[i].name);document.write(" data=" + dataArray[i].data);document.write("<br/>");}// --></script></body></html>

iBatis-sqlMapファイル内内にの記号を記述する

イメージ
これまでのsqlMapファイルには、<>の記号を使ってきませんでした。 sqlMapファイルはXMLで書くため、<>の記号を利用する必要がある場合には、注意しなければなりません。 といっても、その場合の記述方法は簡単で、 <![CDATA[ と ]]> で囲んであげればOKです。

Tapestry

イメージ
昨日Tapestry in Actionの本が良いと紹介したのですが、これってHoward M.Lewis Shipさんが書いた物なんですね、Tapestryの作者が書いた本というのに今まで気が付きませんでした。 Lweis ShipさんのHP を見て初めて気が付きました。 2月24日の記事 でValidationStrings_ja.propertiesを落としてくると良いと書きましたが、ダウンロードしたファイルの中にケアレスミスが見つかりました。 field-too-shortが間違っています。 field-too-long = {1}に{0}文字以下の文字列を入力してください. field-too-short = {1}に{0}文字以下の文字列を入力してください. Share on Tumblr Tweet

Tapestry 本

イメージ
Tapesrtyの日本語の解説本は現在発売されていません。 雑誌等に記事として掲載されているのみです。 ネットで調べるのも良いですが、最初の取り掛かり時期に日本語で書かれた解説があると非常に効率が良いです。 これから勉強されるかたは、参考にしてください。 Tapestry in Action 洋書(英語)です。非常に詳しくサンプルも交えながら書かれています。Tapestryを本格的に使っていくのであれば、必須ともいえる本です。少々高いですが買う価値はあると思います。 月刊JavaWorld 2003年12月号,2004年1月号,2004年2月号 株式会社デュオシステムズ DUO SYSTEMS Tapestryの勉強をしたときに参考にさせて頂きました。 JavaWorldに掲載された記事を上記URLからそのまま見ることができます。 WEB+DB Prees vol31 最新号です。少しですがTapestry4について書かれています。Tapestry4についての日本語についての説明は、あまりありませんので貴重です。10ページ程の記事が載っています。 Tapestry3に詳しい方にはあまり参考にならないと思います。

Tapestry JavaScript(2)

イメージ
前回簡単なJavaScriptテンプレートのサンプルを載せました。 TagListコンポーネントをHTMLテンプレートから呼び出すと自動的にJavaScriptも出力されるわけですが、同じページに2つTagListコンポーネントを使用すると変数名やfunctionの重複が発生します。 重複を回避するために<unique>を使用します。この他にもJavaScriptテンプレートには、使用可能なエレメントが存在します。これらについて説明していきたいと思います。 <unique>エレメント 重複例 HTMLテンプレート <span jwcid="@TagList" /><span jwcid="@TagList" /> 出力されるHTML <script type="text/javascript"><!--var name = "12345";alert(name);var name = "12345";alert(name);// --></script> 上記の出力結果では、1つのscriptタグ内にまとめられてはいますが、変数名の重複が起こっています。 また、alertは1回だけ表示したい時もあります。 重複の回避 同じものを表示させないようにするには、<unique>エレメントを使用します。 -WEB-INF/jwc/TagList.script <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE scriptPUBLIC "-//Apache Software Foundation//Tapestry Script Specification 3.0//EN""http://jakarta.apache.org/tapestry/dtd/Script_3_0.dtd"><script><body><unique>var ${varName} = "${varValue}&quo

iBatisでSELECT(2つのテーブルからデータ取得)

イメージ
データベースを利用しているシステムでは、必ず複数のテーブルが存在し、かつ、リレーションしています。 今回は、複数のテーブルからの情報取得について、書こうと思います。 今回も基本的な環境は同じで、テーブルを新たに追加します。 ID ITEM_NAME 1 ITEM1 1 ITEM2 1 ITEM3 2 ITEM1 2 ITEM2 3 ITEM3 IDの部分は、今まで利用してきた、USER_TABLEのIDを外部キーとしたものです。 ユーザが複数のアイテムを持っているようなケースと考えてください。 (ただし、複数のテーブルから情報を取得することが目的なので、正規化等の話はまったくなしで進めます。)

iBatisでINSERT(自動採番値の利用)

イメージ
iBatisを使ってINSERTを行う際に、自動採番で採番された情報をINSERTのパラメータとして利用し、 かつ、その採番した値を取得する方法について説明します。 環境は「 iBatisでSELECT 」と同様ですが、Postgresを利用しているので、自動採番用で利用するシーケンスの作成をしておきます。 CREATE SEQUENCE userid_seqSTART 1000 START で1000を指定していますが、ただ単にこれまでINSERTしてきたデータよりも大きい値を設定しておきたかったためです。

Tapestry JavaScript(1)

イメージ
あまり情報として出てきませんが、TapestryではJavaScriptも簡単に扱えます。 HTMLテンプレートにJavaScriptを書くこともできますし(Tapestry3ではできませんでした)、特定のコンポーネントを使用するときに自動的にJavaScriptを生成して出力したり、動的に出力内容を変更したりといったことも可能です。 簡単なJavaScriptであれば、HTMLテンプレートに、<script language=”JavaScript” type=”text/javascript” src=”general.js” ></script>等記述し読み込ませる。もしくは、そのままJavaScriptを記述することもできますが、状態により出力するJavaScriptを変更したいときに、コンポーネントとセットにしたJavaScriptテンプレートを使用します。 Tapestry3とTapestry4ではJavaファイルの書き方が異なりますが、それ以外のファイルは共通です。 Tapestry4でのJavaScriptテンプレートの扱い方について説明したいと思います。 以下に記述するのは、TagListコンポーネント内でJavaScriptを生成し、TagListコンポーネントが使用されているページが表示した時に、ダイアログを表示するサンプルです。ダイアログに表示する文字列は、TagListコンポーネント内で決定しています。

iBatisでINSERT,UPDATE,DELETE

イメージ
sqlMapを利用し、INSERT、UPDATE、DELETEを行ってみます。 動作環境等については、「 iBatisでSELECT 」と同じです。 追加、変更する部分についてのみ説明していきたいと思います。