9.2.3. ページノードと遷移
各
<page> ノードは、システムがユーザー入力を待っている状態を表します。
view-id は JSF のビュー ID です。 <redirect/> エレメントは JSF ナビゲーションルールにある <redirect/> と同じ効果をもたらします。 つまり、 post-then-redirect の動作をしてブラウザの更新ボタンに関する問題に対応します。 (Seam はこれらブラウザのリダイレクト全体に対話コンテキストを伝播するため、 Ruby on Rails 系の フラッシュ 構造は必要としません。)
遷移名は
numberGuess.jsp のコマンドボタンまたはコマンドリンクをクリックすると起こる JSF 結果の名前です。
<h:commandButton type="submit" value="Guess" action="guess"/>
<h:commandButton type="submit" value="Guess" action="guess"/>
このボタンをクリックして遷移が起こると、 jBPM は
numberGuess コンポーネントの guess () メソッドを呼び出して遷移のアクションを起動します。 jPDL でアクションの指定に使用される構文は普通の JSF EL 式であり、 遷移のハンドラは現在の Seam コンテキストにある Seam コンポーネントのメソッドになります。 従って、 JSF イベント用のイベントモデルと同じイベントモデルを jBPM イベント用に持つことになります。これは Seam で従うべき原則の 1 つです。
結果が null になる場合 (
action が定義されていないコマンドボタンなど)、 Seam は名前のない遷移のサインがあればそれを送信します。 すべての遷移に名前が付けられている場合には単純にそのページを再表示します。 したがって次のようにこのボタンとページフローを単純化することができます。
<h:commandButton type="submit" value="Guess"/>
<h:commandButton type="submit" value="Guess"/>
次のような名前のない遷移を実行します。
ボタンにアクションメソッドを呼び出すことも可能です。 この場合アクションの結果が行われる遷移を決定します。
<h:commandButton type="submit" value="Guess"
action="#{numberGuess.guess}"/>
<h:commandButton type="submit" value="Guess"
action="#{numberGuess.guess}"/>
<page name="displayGuess" view-id="/numberGuess.jsp"> <transition name="correctGuess" to="win"/> <transition name="incorrectGuess" to="evaluateGuess"/> </page>
<page name="displayGuess" view-id="/numberGuess.jsp">
<transition name="correctGuess" to="win"/>
<transition name="incorrectGuess" to="evaluateGuess"/>
</page>
ただし、 これはフロー制御をページフロー定義以外に移行して他のコンポーネントに戻しているため質の悪いスタイルだと考えられます。 フロー制御関連はページフロー自体に集中させる方がよいでしょう。