79.ビュー内の計算属性——ASP、JSP、JSFからXPagesまでの「ダイヤモンド」


「ダイヤモンド」とシンプルで効率的なビューレイヤテクノロジー


XPagesが発売されたばかりの頃、Domino Designがスタートした後のウェルカムページでは、この期待されている新技術についてハイライト式の紹介がありました.その一節はDiamonds and eventsというタイトルでOn the Properties tab,almost everything is computableと書いてある.Look for theblue diamond icon and click it to get to the script editor. By invoking theeditor, you can write a formula to compute a value. プロパティビューでは、ほとんどの項目が計算可能であることを意味します.いずれかの青いダイヤモンドのアイコンを見つけて、クリックしてスクリプトエディタ(Script Editor)に行きます.エディタでは、アトリビュートの値を計算する式を書くことができます.これらの「ダイヤモンド」をXPagesのハイライトとして紹介するのは理にかなっている.XPageでコントロールを選択すると、プロパティビューにそのコントロールの分類が表示されるプロパティが表示されます.そのほとんどの後ろには(青ではなく、マウスが浮かぶと青になります)中空のダイヤモンドのアイコンがあります.クリックすると、ドロップダウンメニューが表示されます.1つ目は「静的値を使用」、2つ目は「計算値」で、選択するとスクリプトエディタが開きます.中にコードを入力すると、属性の後ろに{Computed}が表示され、ダイヤモンドもソリッドになります.もちろん、これらの「ダイヤモンド」とスクリプトエディタはDesignerが開発者の視覚的なヒントとツールを容易にするために、XPageのソースコードビューでcontrolProperty=「#{bean.property}」などの形式で計算属性を直接追加することができ、本質に近いだけでなく、図形化よりも広く運用されています.属性ビューにはダイヤモンドアイコンが右側にない属性もあります.ビュー列の表示プロパティラベルページのように、Show values in this column as link、Check box、Iconなどは、Designerの設計者が値を計算する必要がないと考えているため、計算プロパティを設定できないことを意味するものではありませんが、実際の開発では、必要に応じてソースビューで計算プロパティを設定することができます.65.XPagesカスタムコントロール(3)高度な検索の3つの文にリストされている条件検索コントロールのコードは、この点に使用されます.次のビュー列のコードでは、showCheckbox属性があるカスタムコントロールのカスタム属性showEditにバインドされ、リンクとして表示されるdisplayAs属性もshowEditに基づいて計算されます.このように異なるXPageでは,このカスタムコントロールのshowEdit属性を設定することで,異なるユーザや場合におけるこの列の表示や機能上の異なるニーズを満たすことができる.
		<xp:viewColumn id="viewColumn8" columnName="$8"
			showCheckbox="${javascript:compositeData.showEdit}">
			<xp:this.displayAs><![CDATA[${javascript:if (compositeData.showEdit) return "link";}]]></xp:this.displayAs>
			<xp:this.facets>
				<xp:viewColumnHeader xp:key="header"
					id="viewColumnHeader8" value="Date">
				</xp:viewColumnHeader>
			</xp:this.facets>
			<xp:this.converter>
				<xp:convertDateTime type="date"></xp:convertDateTime>
			</xp:this.converter>
		</xp:viewColumn>

これらは古典的なLotusNotesの開発を熟知したプログラマーにとって新しい概念であり、DominoDesignerで伝統的な各種設計要素とその上の要素に属性を設定する場合、フィールド値、ビュー選択などの特殊な「属性」を除いて公式を入力して計算することができ、大部分の属性は古典的な属性ボックス(properties box)で静的値を設定する.XPageファイルのほとんどのプロパティは式を設定して計算できます.これは確かにアプリケーションのビュー開発に大きな柔軟性をもたらしましたが、Lotus Dominoプラットフォーム以外では新鮮ではありません.HTMLやXMLのような宣言言語でユーザーインタフェースを定義し、計算された属性値を単純な式言語で設定して動的なインタフェースを実現します.まず,宣言言語定義インタフェースを用いることは,コマンド型言語よりも簡潔で効率的である.次に,単独のインタフェース定義ファイルは,インタフェースとビジネスロジックの分離の原則を徹底的に貫徹している.最後に,式言語とイベントバインドを用いて,ビューとモデル間の情報伝達と制御変換を明確に実現し,両者の独立性を維持した.このような良好なアーキテクチャは多くのウェブ開発技術のビュー層にすでに応用されている.

Active Server Pages


マイクロソフト社は当初、動的Webサイトの開発に向けてASPテクノロジーを開発し、サーバ側で実行されるスクリプトとHTMLを混合した.ダイナミックコンテンツを出力するには、基本的に2つのモードに分けることができます.1つは、基本的なHTMLコードに<%=expression%>スクリプト式で計算された値を挿入することです.二つ目は、大段の<%script%>スクリプトにResponseを使用することです.Write()はHTMLを出力します.次のコードに示します.
<!DOCTYPE html>
<html>
<body>
<%
dim h, greetingTime
h=hour(now())
If h<12 Then
	greetingTime="morning"
Else
	greetingTime="day"
end If
'show the current time
response.write("<p>" & now())
response.write("</p>")
%>
<div>
<p>Norm 1, to use varibles to output content</p>
<p>Good <%=greetingTime%>!</p>
</div>
<div>
<p>Norm 2, to use Response.Write() to output html</p>
<%
dim h2
h2=hour(now())
response.write("<p>")
If h<12 Then
   response.write("Good Morning!")
Else
   response.write("Good day!")
end If
response.write("</p>")
%>
</div>
</body>
</html>
この2つの従来のモードは、完全なHTMLタグまたはその内容としてのテキストのみを対象としていますが、ASPは、HTMLタグにスクリプト式を埋め込んで属性値を計算することも受け入れます.
<%
dim align
align="center"
%>
<TABLE align="<%=align%>">
上記のコードは、の有効なHTMLを生成します.

JavaServer Pages、JavaServer Faces、XPages


Sun社が後ほど発表するJavaベースの企業開発案に含まれるJSP技術は、ASPと似ている点もあれば、異なる点も多い.本稿の主題についてのみ,JSPは上記と極めて類似したコードでHTMLタグの属性を計算することができる.
<%
String align="center";
%>
<TABLE align="<%=align%>">
では、このようなスクリプト式を含むHTMLはXMLフォーマット仕様に合致しないため、JSPドキュメント(JSP document,.JSPXファイル)では規格に合致しないことを指摘する必要があります.
Java Standard Tag Libraryが開発したJSP式言語(Expression Language)により、このようなダイナミックプロパティの作成がより簡潔になり、上のJSPコードは次のように書き換えることができます.

beanはバックエンドのJava Beanを指します.
JSF開発当初は,その技術的必要性のために専門的な表現言語(後にJSP表現言語とUnifiedExpression Languageに統一)を作成し,JSFを柱とするXPagesがこの言語を継承・拡張し,サーバ側JavaScriptのサポートも加わった.XPage内で計算属性を設定する場合、ExpressionLanguage(EL)を選択するか、データバインド時にExpressionLanguage(EL)、ComponentParameter、Scoped Variableを選択すると、背後には式言語が使用されますが、JavaScript(Server Side)を選択する場合はサーバ側JavaScriptが自然に使用されます.

XPagesの式言語


最後にXPagesの表現言語を簡単に見てみましょう.JSFの表現言語は環境のニーズに応じていくつか拡張されています.基本的なポイントは以下のように列挙できます.
${exp}と#{exp}
前者はページの最初の読み込み時に計算されます.後者は、ページのコンポーネントツリーが再構築されるたびに、すなわち、ページがボタンの発行やクリックなどの任意のユーザイベントに応答して再表示されるたびに計算されます.
意味表現(Literals)
ブール値:true、false
数値(整数および浮動小数点):3、2.4、-1.5
文字列:「abc」、「this includes escape chars:',',\\」
識別子(Identifiers)
JSFおよびXPages環境でサポートされている暗黙的なオブジェクト変数:facesContext、view、request、param、cookie......
faces-config.xmlに登録されているManaged Beans.
演算子
演算子:+、-、*、/、div、mod
論理的:and,&&,or,|,not,!
関係の:==、eq、!=、ne、>、gt、<、lt、>=、ge、<=、le
条件の:condition?actionA : actionB
タイプ判定:empty判定null,instanceof判定タイプ
ツールバーの
JSFではフラグとその属性の解析はすべて1つの挿抜可能なフレームワークに確立されている.したがって、XPagesは、必要に応じてより多くの暗黙的なオブジェクト変数を提供することができます.変数属性の解析も一定のインタフェースに従えばよい,XPagesには,1)Java Beanのgetter/setterの命名習慣,2)JavaのMapインタフェース,3)comが含まれる.ibm.xsp.model.DataObjectインタフェース.次のプロパティ解析は可能です.
myBean.name --> myBean.getName();
myBean["key"] --> myBean.get("key");
myBean.customers["Apple"] --> myBean.getCustomers().get("Apple");