近年、Java は徐々に熱を帯びてきており、Java SE 5 と Java SE 6 のリリースにより、Java の未来はさらに明るくなりました。しかし、Java ベースの JSP は、Java SE 5 のリリース前に頭を上げることができませんでした。最も重要な理由は、JSP は非常に強力ですが、その最大の利点は、強力な機能が複雑さを意味する、特に最大の欠点があることです。フロントエンド インターフェイスを設計するためのビジュアル ツールはそれほど多くなく、十分強力ではありません。そのため、JSP ページの設計は非常に複雑で面倒なものになります...
近年、Java は徐々に熱を帯びてきており、Java SE 5 と Java SE 6 のリリースにより、Java の未来はさらに明るくなりました。しかし、Java ベースの JSP は、Java SE 5 のリリース前に頭を上げることができませんでした。最も重要な理由は、JSP は非常に強力ですが、その最大の利点は、強力な機能が複雑さを意味する、特に最大の欠点があることです。フロントエンド インターフェイスを設計するためのビジュアル ツールはそれほど多くなく、十分強力ではありません。したがって、JSP ページの設計は非常に複雑で面倒なものになります。ただし、Java SE 5 のリリースと同時に、Sun は JSP の開発を簡素化するために、新しい JavaServer Faces (略して JSF) 仕様をリリースしました。これにより、JSP は明るい道を歩むことになります。
1. JSF とは何ですか?
JSF と JSP は新しいペアです。 JSP はバックグラウンド ロジック処理に使用されるテクノロジですが、JSF はその逆で、開発者が Java ベースの Web アプリケーションを迅速に開発できるようにするテクノロジです。現在、JSF1.2がJava EE 5に標準として正式に追加されました。
高度にコンポーネント化されたテクノロジーなので、開発者は一部の開発ツールのサポートを利用してドラッグ アンド ドロップ編集操作を実装でき、ユーザーは JSF コンポーネントをページにドラッグするだけで簡単に Web 開発を実行できます。これは、コンポーネント化されたテクノロジとしての最大の利点です。使用できるコンポーネントは、比較的単純な入力ボックスだけでなく、Tree などの DataTable Tree コンポーネントなどのより複雑なコンポーネントです。
標準テクノロジーとして、JSF は多くのツール プロバイダーによってサポートされています。同時に、優れた無料の開発ツールも数多く提供されます。つい最近、JSF をサポートする無料の開発ツールとして Sun Java Studio Creator 2 と Oracle JDeveloper 10g がリリースされ、JSF に大きな活力をもたらしました。さらに、BEA Workshop (旧名 M7 NitroX)、Exadel、MyEclipse などの優れた商用開発ツールも用意されており、現在の IBM のユーザーの多くに大きな利便性をもたらしています。 Rational Application Developer と Borland の JBuilder も、JSF ビジュアル開発をサポートする非常に優れた商用開発ツールです。
JSF は従来の Web テクノロジーとは根本的に異なります。従来の Web テクノロジーでは、ユーザーがブラウザーのリクエストをキャプチャし、クライアントの状態を保存し、ページのリダイレクトなどを手動で制御する必要があります。 JSF の登場により、間違いなく大きな利便性がもたらされました。JSF は、アプリケーション開発者がアプリケーションのページ フローを設計できるようにする、イベント駆動型のページ ナビゲーション モデルを提供します。 Struts のアプローチと同様に、すべてのページ フロー情報は、アプリケーションにハードコーディングされるのではなく、JSF 構成 XML ファイル (faces-config.xml) で定義されます。これにより、開発者の開発の難しさが大幅に軽減され、アプリケーションの開発が簡素化されます。
同時に、JSF はモデル ビュー コントローラー (MVC) パターンに従うフレームワークでもあります。ビュー コード (ビュー) とアプリケーション ロジック (モデル) の完全な分離が実現され、JSF テクノロジを使用するアプリケーションがページとコードを適切に分離できるようになります。 JSF ページに対するすべてのリクエストは、フロントエンド コントローラー (FacesServlet) を通じて処理され、システムはユーザーのリクエストを自動的に処理し、結果をユーザーに返します。これは従来の MVC フレームワークとあまり変わりません。
JSF は POJO テクノロジーを使用するだけでなく、Spring のような制御の反転 (IoC) (または依存性注入 -DI) テクノロジーも使用して、ビューに必要なデータと操作をバッキング Bean に入れることができます。 。同時に、JSF で使用される DI テクノロジのおかげで、構成ファイル内でマネージド Bean を初期化することができます。同時に、このテクノロジを使用して、同様のテクノロジを使用する Spring と簡単に統合することもできます。
2. JSP での JSF の使い方
JSF は、JSP と組み合わせることで初めてその効果を最大限に発揮できます。 JSF は、タグ ライブラリと JSP を通じて統合されます。タグ ライブラリは、ASP.NET のサーバー側コンポーネントに相当します。 JSF は、HTML、WML、XML、JavaScript などのさまざまなクライアント モデルを生成できる非常に豊富なタグ ライブラリを提供します。これらのタグを通じて、大規模なクライアント モデルを簡単に構築し、これらのタグを通じてクライアント リクエストを自動的に処理できます。
次に、JSF と JSP を連携させる方法の例を見てみましょう。 JSF には 2 つのライブラリがあります。 1 つ目はカーネル ライブラリと呼ばれるもので、コンポーネントの構成、イベントの管理、入力情報の検証など、さまざまな主要なタグが含まれています。 2 番目のライブラリの主な機能は、HTML および JSF のさまざまなタグに対応することです。各 JSF タグは HTML コンポーネントに対応します。たとえば、UIInput タグは、HTML のテキスト ボックスやパスワード ボックスに対応します。
JSF タグ内のテキスト入力ボックスは inputText と呼ばれ、パスワード入力ライブラリは inputSecret と呼ばれます。以下は、JSF と JSP を組み合わせた単純なユーザー インターフェイス プログラムです。
<%@ taglib uri=" http://java.sun.com/jsf/html " prefix="h" %>
<%@ taglib uri=" http://java.sun.com/jsf/core " プレフィックス="f" %>
<html>
<head>
<meta HTTP-EQUIV="Content-Type" CONTENT="text/html;CHARSET=GB2312">
<title>最初の JSF プログラム </title>
</head >
<body>
<f:view>
<h:form id="simpleForm">
<h:outputText id="favoriteLabel" value="数字を入力してください:"/>
<h:inputText id="favoriteValue" value= " #{simple.longValue}">
<f:validateLongrange minimum="30" minimum="0"/>
</h:inputText>
<p/>
<h:commandButton id="submit" value="Submit" action = "#{simple.simpleActionMethod}"/>
</h:form>
</f:view>
</body>
</html>
上記のコードでは、JSF がどのように JSP と統合されているかを理解できます。まず、カーネル ラベル: view が表示されます。次に、いくつかの JSF コンポーネントがあります。フォーム、outputText、inputText、commandButton など。これらのコンポーネントはフォームに配置され、フォームの一部になります。プログラムの最初に、import を使用して 2 つのタグ ライブラリをインポートする必要があります。コードは次のとおりです。
<%@ taglib uri=" http://java.sun.com/jsf/html " prefix="h" %>
<%@ taglib uri=" http://java.sun.com/jsf/core " プレフィックス="f" %>
上記の 2 行のコードは、JSP で使用する JSF タグ ライブラリを宣言します。カーネル ライブラリは接頭辞 f で宣言され、HTML ライブラリは接頭辞 h で宣言されます。これら 2 つの接頭辞は必須ではありませんが、単なる提案です。すべての JSF ページでビューを使用する必要があるため、プログラムではカーネル ライブラリを使用する必要があります。 HTML タグは、実行時に JSF タグを HTML コンポーネントに変換します。この h 接頭辞は必須ではありませんが、JSF 仕様によって推奨されています。これにより、JSF プログラムが読みやすくなります。
宣言の後には、標準の HTML ステートメントが数行続きますが、この記事では詳しく説明しません。 <f:view> から始まるのは JSF ステートメントです。このコードは次のとおりです。
<f:view>
<h:form id="simpleForm">
<h:outputText id="favoriteLabel" value="数字を入力してください:"/>
<h:inputText id="favoriteValue " value="#{simple.longValue}">
<f:validateLongrange minimum="30" minimum="0"/>
</h:inputText>
<p/>
<h:commandButton id="submit" value=" 送信"
action="#{simple.simpleActionMethod}"/>
</h:form>
</f:view>
</f:view> タグは JSF の始まりを告げ、その次のタグ form は HTML フォームを作成します。 OutputText タグは、HTML のラベル コンポーネントに相当します。 inputText タグは、HTML の textField コンポーネントに相当します。 commandButton タグは、HTML の送信ボタンに相当します。この JSP プログラムを実行すると、図 1 に示す効果が得られます。
3. JSP は JSF リクエストにどのように応答するのでしょうか?
上の例から、JSP での JSF の使用方法はすでにわかりました。この部分では、JSF でリクエストがどのように処理されるかを見てみましょう。
まず、華氏を摂氏に変換する例を見てみましょう。ユーザーが送信ボタンをクリックすると、プログラムが移行します。
<%@ taglib uri=" http://java.sun.com/jsf/html " prefix="h" %>
<%@ taglib uri=" http://java.sun.com/jsf/core " プレフィックス="f" %>
<html>
<head>
<meta HTTP-EQUIV="Content-Type" CONTENT="text/html;CHARSET=GB2312">
<title>温度変換プログラム</title>
</head>
< body>
<f:view>
<h:form>
<div>
<h:outputText id="fahrenheitLabel" value="華氏温度を入力してください:"/>
<span>
<h:inputText id="温度" value= " #{tc.fahrenheitTemp}">
<f:validateDoublerange minimum="-100.0" minimum="100.0"/>
<f:valuechangeListener type="tempconv.page.TCChangedListener"/>
</h:inputText>
</span >
</div>
<div>
<h:outputText id="celsiusLabel" value="摂氏温度:"/>
<スパン>
<h:outputText id="celsiusValue" value="#{tc.celsiusTemp}">
< f :convertNumber maxFractionDigits="3" type="number"/>
</h:outputText>
</span>
</div>
<div>
<h:commandButton value="Convert" action="#{tc.convert} " >
</h:commandButton>
</div>
</h:form>
</f:view>
</body>
</html>
プログラムの最初の 2 行で、JSF コア ライブラリと HTML ライブラリがインポートされますこれについては以前に説明したので、ここでは詳しく説明しません。
JSF タグがバックエンドとどのように対話するかを見てみましょう。 JSP で JSF を使用しているため、この JSP と通常の JSP の間に違いはありません。JSP が初めて実行されるとき、JSP コンパイラーは .JSP ファイルをサーブレットにコンパイルし、それを呼び出します。次に、サーブレットはクライアントからデータ ストリームを受信します。ただし、通常の JSP プログラムとは異なり、JSF タグは JSF API によって呼び出されます (これにより、ロジック層とプレゼンテーション層を分離できます)。それ以外は、通常の JSP タグと変わりません。
UIComponent タグが doStartTag メソッドを受け取ると、JSF はこれらのプロパティを使用してタグの値を設定します。たとえば、この例の inputText タグは、その属性値に従って設定されます。以下は JSF のコード スニペットです。
<h:inputText id="温度" value="#{tc.fahrenheitTemp}">
<f:validateDoublerange minimum="-100.0" minimum="100.0"/>
<f:valuechangeListener type="tempconv.page.TCChangedListener" />
</h:inputText>
inputText タグは、対応する値に従って id 属性と value 属性を設定します。 JSF では、各属性値は setAttribute(String name, Object value) によって設定されます。ただし、JSF タグは対応するデフォルト値を指定できることに注意する必要があります。これは、Java のシステム プロパティに似ています。プロパティ名を指定すると、そのプロパティが存在しない場合、システムはそのプロパティの値を返します。
次に、上記のプログラムの最も重要な部分である UIInput コンポーネントのイベント処理を見てみましょう。
<f:valuechangeListener type="tempconv.page.TCChangedListener"/>
JSF では、イベント処理は valuechangeListener タグによって完了します。このラベルで表されるイベントは、テキスト ボックスの値が変更されたときにイベントをトリガーします。しかし、興味深いのは、このイベントはすぐには送信されず、ユーザーが [送信] ボタンをクリックするまでイベントと対応するデータがバックエンドに送信されないことです。したがって、このイベントリクエストはプリコミットとも呼ばれます。最後に、UICommand のコード実装を見てみましょう。
<div>
<h:commandButton value="Conversion" action="#{tc.convert}">
</h:commandButton>
</div>
上記のコードは、convert() メソッドと UICommand を接続します。つまり、 「送信」ボタンをクリックすると、convert() メソッドが実行されます。 view タグに遭遇すると、JSF プログラムが実行され、JSFAPI は最後に doEnd メソッドを呼び出して JSF プログラムを終了します。このプログラムを解析した後、JSF エンジンは対応する JSF タグを HTML コンポーネントに変換します。
最後に、JSP が JSF イベントにどのように応答するかを見てみましょう。以下は、JSF イベントに応答する Java コードの一部です。
public class TCChangedListenerimplements ValueChangeListener
{
public TCChangedListener()
{
super();
}
// イベント処理
public void processValueChange(ValueChangeEventevent)
throws AbortProcessingException
{
UIComponent comp =event.getComponent()
;
if ( null != value)
{
float curVal = ((Number) value).floatValue();
マップ値 = comp.getAttributes();
if (curVal < 0)
{
values.put("styleClass", "red") ;
}
else
{
values.put("styleClass", "black");
}
}
}
JSF イベントに応答するには、JSF ライブラリに ValueChangeListener インターフェイスを実装する必要があります。上記プログラムで注目すべき点は、最終的に入力値に応じて対応する色が設定されることです。これらの値は JSP に依存しません。もちろん、これらを null に設定して、JSP タグに色を設定させることもできます。