メイン

2006年04月05日

Tapestry Visit and Global

Tapestry3.0では2種類のASO(Application state Object)が用意されていました。

Visit:

セッション毎に作成されるオブジェクト
例えばユーザがログインしてログアウトするまでの、状態を保持する時に使用します

Global

アプリケーション単位で作成されるオブジェクト
アプリケーションが起動して終了するまでの状態を保持する。初期設定値等を保持するのに使用される

Tapestry3では、ページやコンポーネントからの、これらのオブジェクトへのアクセスは、getVisit(), getGlobal()等のメソッドが用意されアクセスする事が可能でした。Tapestry4では、この2つの関数はまだ残っていますが、動作が異なりますので注意が必要です。
Tapestry4では、getVisit(), getGlobal()は使用せずに、自分でApplication State Objectの作成をします。 私の場合は、appVisit, appGlobalの名前で作成し、わざと従来のVisit,Globalと区別して使用しています。

hivemodule.xml
  	<!--  Visit & Global -->
	<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.state.ApplicationObjects">
		<state-object name="AppGlobal" scope="application">
			<create-instance class="jp.co.taosoftware.tagraw.tape.AppGlobal" />
		</state-object>
	</contribution>

続きを読む "Tapestry Visit and Global" »

2006年03月28日

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:requestExceptionReporter"/>
	      <set-object property="response" value="infrastructure:response"/>
	      <set-object property="linkFactory" value="infrastructure:linkFactory"/>
	      <set-object property="dataSqueezer" value="infrastructure:dataSqueezer"/>
    	  <set-service property="appStateMgr" service-id="tapestry.state.ApplicationStateManager"/> 
	    </construct>
	  </invoke-factory>
	</service-point>

続きを読む "Tapestry Engine Service" »

2006年03月17日

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" src="/tagraw/WEB-INF/jwc/../../taglist.js"></script>
...
</body>

続きを読む "Tapestry JavaScript (3)" »

2006年03月09日

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}文字以下の文字列を入力してください.

2006年03月08日

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 本" »

2006年03月07日

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 script
      PUBLIC "-//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}";
</unique>    
    alert(name);
</body>
</script>

上記のように変数の値の部分のみをuniqueエレメントで囲うことで、同じコンポーネントを2回使用してもページ内には1回のみ表示されるようになります。( alert文はuniqueエレメントで囲っていませんので2回表示されます)

出力されるHTML
<script type="text/javascript"><!--
	var name = "12345";
	alert(name);
     
	alert(name);
// --></script>

initializationエレメント

JavaScriptを記述するとページを総て読み込んだ後に特定の関数を実行したいことがあります。 window.onload = function ()等で指定しても良いのですが、Tapestryでは、ページの最後(body終了タグの直前)にJavaScriptを埋め込む命令があります。

-WEB-INF/jwc/TagList.script
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE script
      PUBLIC "-//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}";
</unique>    

<initialization> 
    alert(name);
</initialization> 
</body>
</script>
HTML出力結果
.....
<script language="JavaScript" type="text/javascript"><!--

 alert(name);
// --></script>
</body>
  
initializationタグで囲まれた部分が、HTMLの最後に表示されます。もちろんこの中でuniqueエレメントを使用する事も可能です。

続きを読む "Tapestry JavaScript(2)" »

2006年03月02日

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コンポーネント内で決定しています。

続きを読む "Tapestry JavaScript(1)" »

タオソフトウェア

tao twitter
tao twitter
tao twitter

広告