- - PR -
JSF 画面遷移(URL)が変?
1|2|3
次のページへ»
投稿者 | 投稿内容 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-11-17 15:01
こんにちは。
Tomcat、MyFaces、Spring、Hibernate、MySQLで Webアプリケーションを作成しています。 だいたい動いているのですが、どうも画面遷移が 変なのです。 例えば、 login.jsf → toppage.jsf へ遷移するのですが、 toppage.jsfが表示されている状態で、ブラウザの アドレスは、login.jsfを指しています。 その後、 toppage.jsf → page1.jsf へ遷移すると、やはり page1.jsfが表示されている状態で、ブラウザの アドレスは、toppage.jsfを指しています。 その為、再読込すると前のページをロードします。 再読込さえ(あと戻るボタンとか)しなければ、 正常に動きます。これは、JSFの仕様でしょうか? それともMyFacesの仕様? 皆様におかれましては、どんな状態で動作されて いるのでしょうか? ちょっと、気持ち悪いので、正しいURLが表示でき るようにしたいので、ご教授お願いします。 このあたり、「戻るボタン」制御などとも関係して くるかなと思っているのですがどうでしょうか? 一般的な「戻るボタン」制御って、 ・ページのキャッシュを残さない ですか? これだと、戻った後に「ページの有効期限切れ」に なってしまいませんか? そのあたりも踏まえて、コメントをいただけると 非常に助かります。 よろしくお願いいたします。 | ||||||||||||||||
|
投稿日時: 2005-11-17 19:14
この「遷移」というのがフォワードを指しているのであれば、これは正しい動きです。 フォワードというのはサーバ内での処理ですので、ブラウザから見ればlogin.jsfへの リクエストに対してレスポンスが返っているわけで、toppage.jsfというURLは知りようが ありません。もし、toppage.jsfに明示的にブラウザ側で遷移するのであれば、フォワード ではなくリダイレクトによって遷移すべきです。 | ||||||||||||||||
|
投稿日時: 2005-11-17 19:18
いえ、普通にボタンを押してSubmitしたり、 リンクをクリックして遷移した場合です。 よろしくお願いいたします。 | ||||||||||||||||
|
投稿日時: 2005-11-17 19:38
仕様書に明記されているかは知りませんが、仕様みたいなものです。
ちなみにMyFacesもSun RIもどちらも同じような挙動をします。 JSFではStrutsみたいにアクションに対してURLを割り当てません。 UICommandはビューの中で定義されることになるからでしょう。 URLは具体的にどう使われるかと言うと、最初のフェーズである、 RestoreViewで現在のリクエストを引き起こしたビューを特定する ために使われることになります。 もしも復元することができないなら、指定されたURLに相当する ビューをそのままレンダリングするフェーズに移行します。 これは最初のリクエストの場合(FacesServletへGET)などです。 もしビューを復元できたのならば、パラメータから発生もとの UICommandを割り出してそこで定義されたアクションを発動させます。 このようにURLがアクションを発生させたビューのURLとなるため、 常にひとつ前のビューのURLを示すように見えるわけです。 | ||||||||||||||||
|
投稿日時: 2005-11-17 20:33
マジですか...
つまり、JSFではそもそもブラウザの「戻る」ボタンや 「再読込」ボタンを使用しないことが前提なのですね。 それが受け入れられないなら、JSFは使うべからずですか? この操作は、一般的なユーザーは必ずやると思います。 ユーザーを教育しなければいけないわけですね。 ということは不特定多数のユーザーを対象としたインター ネット上のサービスにはJSFは使えないですね。 あと、別ウインドウを開いたりすると変な挙動をします、 開いた元のページが。おそらく原因は同じですね。 非常に勉強になりました。一度、仕様書を読み返します。 ありがとうございました。 | ||||||||||||||||
|
投稿日時: 2005-11-17 20:58
> つまり、JSFではそもそもブラウザの「戻る」ボタンや
> 「再読込」ボタンを使用しないことが前提なのですね。 それとこれとは問題が異なります。混同しないように注意してください。 「この「遷移」というのがフォワードを指しているのであれば」というuk氏の問いに対して 「いえ、普通にボタンを押してSubmitしたり、リンクをクリックして遷移した場合です。 」 という回答からも、forwardの動作を正しく理解されていないように見受けられます。 「普通にボタンを押してSubmitしたり、リンクをクリック」してリクエストを送信した 場合でも、forwardによる画面遷移が行われた場合はURLとレスポンスのコンテンツは 異なるものが返されます。これはJSFに限った話しではありません。 ブラウザの戻るボタンを押下したり再読込ボタンを押下したりした場合の問題は JSFに限らず、どんなWebアプリケーションでも考えなければならない問題です。 問題のJSFですが、ブラウザの戻るボタンを押下したり再読込ボタンを押下したりした場合の 挙動は、実装やバージョンによって異なります。仕様で明確化されていないので、仕方ないところですね。 | ||||||||||||||||
|
投稿日時: 2005-11-17 21:31
ご教授、ありがとうございます。
そのようです。 「普通にボタンを押してSubmitしたり、リンクをクリック」して リクエストを送信する際、リダイレクトすればちゃんとURLも 切り替わるということですか? それは、どのようにコーディング/設定すればよいのですか?
ごもっともでございます。
つまり、私の使用しているMyFaces-1.0.9では、そもそもブラウザの「戻る」ボタンや 「再読込」ボタンを使用しないことが前提なのですね。 JSFの実装って、MyFacesの他にどんなものがありますか? Shaleは正式リリースされてましたっけ? | ||||||||||||||||
|
投稿日時: 2005-11-19 00:40
そういうことです。
<navigation-case>要素の内側に<redirect />を記述します。
SunやIBMなどからリリースされています。
Shaleはまだです。そもそもShaleはJSF実装を提供するプロジェクトではありません。 今のShaleにはMyFacesが含まれています。 |
1|2|3
次のページへ»