トップ 一覧 ping 検索 ヘルプ RSS ログイン

Struts2 単純なアプリケーションの作成 タグの利用の変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
!!!Struts2 単純なアプリケーションの作成 タグの利用
[Struts2]
{{amazon 4839928444}}

*参照
**http://struts.apache.org/2.x/docs/using-tags.html
*サンプル
**{{ref struts2_use_tag.lzh}}
----
[Hello Worldアプリケーションの作成|Struts2 単純なアプリケーションの作成 Hello World]では、簡単なメッセージをページに出力した。
「タグの利用」で、アプリケーションの他のアクションへのリンクを含むページを作成する。

Webアプリケーションは伝統的なウェブサイトとは、動的なレスポンスを生成できる点で異なる。ページからの動的データの参照を簡単にするために、フレームワークはタグセットを提供する。いくつかのタグは、値を与えることにより、標準のHTMLの模倣をする。その他は、標準ではないが有用である。

Strutsタグのひとつの使い方として、他のWebリソースへの特にローカルアプリケーションの他のリソースへのリンクを生成することがある。

!!リンクを張る
::ウェブアプリケーションでは、通常、他のページへリンクを利用する。StrutsのWelcomeページに、他のアクションへのリンクを追加してみる。
{{ref_image struts_tag_01.JPG}}
 <%@ taglib prefix="s" uri="/struts-tags" %>
 <%@ page pageEncoding="UTF-8"%>
 <%@ page contentType="text/html;charset=UTF-8"%>
 <html>
 <head>
   <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
   <title>ようこそ</title>
   <link href="<s:url value="/css/usettag.css"/>" rel="stylesheet" type="text/css"/> 
 </head>
 <body>
 <h3>メニュー</h3>
 <ul>
   <li><a href="<s:url action="ShowRegisterWindow"/>">登録</a></li>
   <li><a href="<s:url action="Login"/>">ログイン</a></li>
 </ul>
 </body>
 </html>
::ロケールの変更にもリンクはよく利用される。ユーザのロケールを変更して、アプリケーションリソースからメッセージを表示させてみる。
{{ref_image struts_tag_02.JPG}}
 <h3>言語</h3>
 <ul>
   <li>
     <s:url id="url" action="HelloWorld">
       <s:param name="request_locale">ja</s:param>
     </s:url>
     <s:a href="%{url}">日本語</s:a>
   </li>
   <li>
     <s:url id="url" action="HelloWorld">
       <s:param name="request_locale">en</s:param>
     </s:url>
     <s:a href="%{url}">English</s:a>
   </li>
 </ul>
::どのように動くのか
"%{url}"は、s:url タグにより評価されたURLとなる。Welcome、HelloWorldページでは、2つの別のStrutsタグでリンクを生成している。

*リソースリンク
*ダイレクトリンク
*パラメータつきリンク

!リソースリンク
まずは、head 要素で、HTMLリンクタグにURLへの参照を埋め込むのにurlタグを利用している。

 <link href="<s:url value="/css/tutorial.css"/>" 
   rel="stylesheet" type="text/css"/>

※ この参照は、絶対参照である。相対参照の解決を心配することなくページを移動できる。
!ダイレクトリンク

上記の「メニュー」セクションで、アクションへの参照のために利用している。

 <li><a href="<s:url action="ShowRegisterWindow"/>">登録</a></li>

リンクが描画されるとき、タグは自動的に適切な拡張を行うので、それらを自分で埋め込む必要はない。
必要に応じ、タグはJava セッション IDと共にリンクのURLエンコードも行為、リクエストをまたがって、Javaセッションが保たれる。

!パラメータつきリンク

最後は、上図の「言語」セクションでは、urlタグを、param、a タグと共に使用して、リクエストパラメータを含むリンクを作成しています。

 <s:url id="url" action="Welcome">
   <s:param name="request_locale">en</s:param>
 </s:url>
 <s:a href="%{url}">English</s:a>

param タグは、パラメータ "?request_locale=en" を Weclome Action URLに付加し、"url"という名前で保持します。
a タグは、"url"の参照を、ハイパーリンクにセットします。

Any number of parameters can be added to the URI by adding more param etags.
!ワイルドカードマッピング

Welcomeページが単なるリンクである場合、アクションクラスは必要ない。
しかしながら、それでもマッピングしたほうがよいのは、アクションURIを利用できるからである。
もし、ページにリンクせず、アクションにしかリンクしないなら、あとで簡単にアクションクラスを追加できる。

 <action name="Welcome">
   <result>/welcome.jsp</result>
 </action>

アプリケーションを作るとき、しばしば直接ページにリンクを張ろうとする。
プロトタイピングを簡単に仕上げるため、Welcome エントリをワイルドカードマッピングに変更することができる。

 <action name="*">
   <result>/{1}.jsp</result>
 </action>
!!データ入力フォーム

たいていのアプリケーションはデータ入力フォームを利用する。Strutsタグを使えば入力フォームを簡単に作成できる。
{{ref_image struts_tag_03.JPG}}
 <%@ taglib prefix="s" uri="/struts-tags" %>
 <%@ page pageEncoding="UTF-8"%>
 <%@ page contentType="text/html;charset=UTF-8"%>
 <html>
 <head>
   <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
   <title>登録</title>
   <link href="<s:url value="/css/usettag.css"/>" rel="stylesheet" type="text/css"/> 
 </head>
 <body>
 <h3>登録</h3>
   <s:form action="Register">
     <s:textfield label="ユーザ名" name="userId" />
     <s:password label="パスワード" name="password" />
     <s:submit value="登録" />
   </s:form>
 </body>
 </html>
::どのように動くのか
*JSPエンジンは、taglib のリファレンスをページの先頭から読み、Struts タグを プレフィックス "s"でこのページで利用するためにロードする。
*Strutsタグ(テキストフィールド、パスワード、サブミット)はそれぞれ適切なラベルとコントロールタイプを発行する。

!覚えておくこと

Webアプリケーションを記述する上で最も困難な箇所はページのコーディングだ。
フレームワークはページのコーディングをカスタムタグにより、簡単にする。
Struts タグは、フレームワークにより、動的なデータにアクセスできる。
タグは、ページ生成に必要な数多くのマークアップを削減する。

[タグ開発ガイド|http://struts.apache.org/2.x/docs/tag-developers-guide.html]
[アクションメンバーへのアクセス、リクエスト属性等をページから取得 OGNL|http://struts.apache.org/2.x/docs/ognl.html]

{{include_html import_keyword_html, "!struts2"}}
{{amazon 193398807X}}