第8章 対話とワークスペースの管理


本章では Seam の対話モデルについて詳細に説明していきます。
Seam 対話 の概念は、3 つの別々のコンセプトが組み合わさり生まれました。
  • ワークスペース というコンセプトと、効率的なワークスペースの管理。
  • 楽観的なセマンティクスの アプリケーショントランザクション というコンセプト。 ステートレスアーキテクチャをベースとする既存のフレームワークでは、拡張永続のコンテキストを効率的に管理することはできませんでした。
  • ワークフロー タスク というコンセプト。
こうした考えを統一しフレームワークで強力にサポートすることで、 以前よりすっきりしたコードでより豊かで効率的なアプリケーションを可能にするパワフルな構成概念を得ました。

8.1. Seam の対話モデル

これまで見てきた例は、以下の規則を用いたシンプルな対話モデルで動作します。
  • JSF 要求ライフサイクルのレスポンス出力フェーズ、 アプリケーション起動フェーズ、モデル値の更新フェーズ、バリデーション実行フェーズ、リクエスト値の適用フェーズなどの間は対話コンテキストは常にアクティブとなります。
  • JSF 要求ライフサイクルのビュー復元フェーズの終了時に、Seam はそれまでの長期実行の全対話コンテキストの復元を試みます。 長期実行の対話コンテキストが存在しない場合は、Seam は一時的な新しい対話コンテキストを作成します。
  • @Begin メソッドが出てくると、 一時的な対話コンテキストは長期実行の対話に昇格します。
  • @End メソッドが出てくると、 すべての長期実行の対話コンテキストは一時的な対話に降格されます。
  • JSF 要求ライフサイクルであるレスポンス出力フェーズの終わりには、Seam は長期実行の対話コンテキストの内容を記憶するか、 一時的な対話コンテキストの内容を破棄します。
  • Faces 要求 (JSF ポストバック) はすべて対話コンテキストを伝播します。 デフォルトでは、 Faces ではない要求 (GET 要求など) は対話コンテキストを伝播しません。
  • JSF 要求のライフサイクルがリダイレクトで短縮される場合、 対話が既に @End(beforeRedirect=true) で終了されていない限り Seam は透過的に現在の対話コンテキストを格納して復元します。
Seam は透過的に対話コンテキスト (一時的な対話コンテキストを含む) を JSF ポストバックおよびリダイレクト全体に伝播します。 特に何も付けなければ Faces でない要求 (GET 要求など) は対話コンテキストを伝播せず新たな一時対話内で処理されます。常にではありませんが、これが通常求められる動作です。
Faces でない要求全体に Seam の対話を伝播させたい場合、 要求パラメータとして Seam 対話 ID を明示的にコード化する必要があります。
<a href="main.jsf?#{manager.conversationIdParameter}=#{conversation.id}"> 
  Continue
</a>
Copy to Clipboard Toggle word wrap
または、 JSFの場合
<h:outputLink value="main.jsf"> 
  <f:param name="#{manager.conversationIdParameter}" 
     value="#{conversation.id}"/> 
  <h:outputText value="Continue"/> 
</h:outputLink>
Copy to Clipboard Toggle word wrap
Seam タグライブラリを使用する場合、 以下は等価です。
<h:outputLink value="main.jsf"> 
  <s:conversationId/> 
  <h:outputText value="Continue"/> 
</h:outputLink>
Copy to Clipboard Toggle word wrap
ポストバック用の対話コンテキストの伝播を無効にするコード例を以下に示します。
<h:commandLink action="main" value="Exit"> 
  <f:param name="conversationPropagation" value="none"/> 
</h:commandLink>
Copy to Clipboard Toggle word wrap
以下は Seam タグライブラリと同等です。
<h:commandLink action="main" value="Exit"> 
  <s:conversationPropagation type="none"/> 
</h:commandLink>
Copy to Clipboard Toggle word wrap

注記

対話コンテキストの伝播を無効にすることと、対話を終了することは同じでは ありません
conversationPropagation 要求パラメータまたは <s:conversationPropagation> タグを使って対話の開始と終了を行う、またはネストされた対話を開始することができます。
<h:commandLink action="main" value="Exit"> 
  <s:conversationPropagation type="end"/> 
</h:commandLink>
Copy to Clipboard Toggle word wrap
<h:commandLink action="main" value="Select Child"> 
  <s:conversationPropagation type="nested"/> 
</h:commandLink>
Copy to Clipboard Toggle word wrap
<h:commandLink action="main" value="Select Hotel"> 
  <s:conversationPropagation type="begin"/> 
</h:commandLink>
Copy to Clipboard Toggle word wrap
<h:commandLink action="main" value="Select Hotel"> 
  <s:conversationPropagation type="join"/> 
</h:commandLink>
Copy to Clipboard Toggle word wrap
この対話モデルにより、 マルチウィンドウ操作に正常に動作するアプリケーションの構築が容易になります。多くのアプリケーションに必要なのはこれだけです。 複雑なアプリケーションの中には以下の追加要件の両方あるいはどちらかを必要とするものがあります。
  • 対話には、 連続的に実行したり同時に実行する多くの小さな単位のユーザーの操作も含まれます。より小さい ネストされた対話 には単独の対話状態セットがあり、また外側の対話状態へのアクセスもあります。
  • ユーザーは同じブラウザのウィンドウ内でいくつもの対話を切り換えることができます。 この機能は ワークスペース管理 と呼ばれます。
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2026 Red Hat