category: Java
DATE : 2006/12/24 (Sun)
DATE : 2006/12/24 (Sun)
例えば、次のような入力必須のフォームがあったとします。
<h:form> <h:inputText required="true" /> <h:commandButton value="戻る" action="prev" /> <h:commandButton value="次へ" action="next" /> </h:form>
「戻る」ボタンを押したときには前のページに戻ります。しかし、上のコードではテキストフィールドに何か入力されていないと戻ることができません。
このような入力必須のフォームから入力なしに抜ける方法には、以下の方法があります。
- 「戻る」ボタンを別のフォームにする。
- 「戻る」ボタンの h:commandButton の immediate 属性を true にする。
「戻る」ボタンを別のフォームにする
「戻る」ボタンを別のフォームにします。このようにすると、「戻る」ボタンのあるフォームは入力が必須のフォームではないので、前のページに戻ることができます。
ただし、ページのレイアウトによっては「戻る」ボタンの位置をスタイルシートで調節する必要が出てきます。
「戻る」ボタンの h:commandButton の immediate 属性を true にする
次のように、「戻る」ボタンの immediate 属性を true に設定します。
<h:commandButton value="戻る" immediate="true" action="prev" />
初めに示したコードでは、「The Life Cycle of a JavaServer Faces Page」の図で示されている段階を全て経た上で次の(もしくは前の)ページへ遷移します。この中には「検証処理(Process Validations)」という段階があり、ここで入力がされているかどうかのチェック行われます。
しかし h:commandButton に immediate 属性を付けると、「検証処理」の前にページを遷移させることができます(正確には action 属性で指定したアクションを実行することになります)。具体的には「リクエストの適用(Apply Request)」段階でアクションを処理できます。
図を見ると、「リクエストの適用」の次にある「イベント処理(Process Events)」から最後の「レスポンスの構築(Render Response)」段階に矢印が延びていることがわかります。
参考文献
PR
●この記事にコメントする
忍者ブログ [PR]