私のWebアプリケーションはSparkFramework(サーバーと同じページに接続)で作成されています。最初のページのURLはhttp:// localhost:4567 / startです。ここから、ユーザーはボタンをクリックして4つのタスクのいずれかを決定します。フォームアクションボタンは/ startです
サーバーはすべてが正常であることを確認してから、このタスクの新しいページ(fixsongsなど)をページから返します(つまり、ページの内容を文字列として返します)。
post(RoutePath.START, (request, response) -> new ServerStart().processRoute(request, response));//User has picked task on start page
ServerFixSongs ssfs = new ServerFixSongs();
path(RoutePath.STARTFIXSONGS, () ->
{
//Display Page
post(RoutePath.FIX, (request, response) -> ssfs.startTask(request, response)); //User submits form on Options page
});
問題は、URLが同じままである、つまり、ユーザーがいる場所の背後にあることです。
これを解決する方法を考え出しました。サーバーがページを返す代わりに、/ fixsongs.go(これはルートにマップされます)にリダイレクトします。メソッドは、ページの内容を文字列として返し、URLを変更します。
post(RoutePath.START, (request, response) -> new ServerStart().processRoute(request, response));//User has picked task on start page
ServerFixSongs ssfs = new ServerFixSongs();
path(RoutePath.STARTFIXSONGS, () ->
{
get(RoutePath.GO, (request, response) -> new FixSongsPage(request.session().attribute(FOLDER)).createPage(null, null)); //Display Page
post(RoutePath.FIX, (request, response) -> ssfs.startTask(request, response)); //User submits form on Options page
});
しかし、私は2つの質問があります
注テンプレートを使用していませんが、j2htmlを使用してWebページを作成しています
htmlは実際には存在せず、ページは動的に作成されるため、最初の呼び出しでhtmlファイルに直接リダイレクトすることはできません。
また、STARTページから開始タスクを送信すると、STARTFIXSONGSにリダイレクトするため、POSTリクエストを送信しますが、これは、次の段階でユーザーが[戻る]ボタンを使用してSTARTFIXSONGSに戻ることができることを意味します。私は彼らがこれを行うことができないことを望んでいるので、これは私がこの場合リダイレクトを使用してはならないことを意味します。
あなたの質問は、実際にはSparkやj2htmlに関連しているのではなく、一般的なWebアプリケーションに関連しています。
これはもっと面倒なアプローチですか?これを行う正しい方法ですか
それはあなたが望むものに依存します。ユーザーがブラウザのボタンを使用してナビゲートできるようにする場合は、Post-Redirect-Getフローを使用します。これを望まない場合は、おそらくajaxリクエストを使用する必要があります。JavaScriptを使用してサーバーに投稿すると、サーバーはDOM(通常はJSON形式)を更新するための指示で応答します。
これらの追加のリダイレクト手順はパフォーマンスに影響しますか
あなたがそれについて心配する必要があるほど十分ではありません。往復がもう1回ありますが、99.9%の場合は問題ではありません。ターゲットユーザーベースが別の大陸でGPRSを使用してページを閲覧している場合はそうなりますが、おそらくそうではありません。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加