この解決策を見つけた後、以前に投稿した質問を解決したと思いました。フォーム送信へのJavascript投稿新しいウィンドウを開きます。しかし、それは私が望むことを完全には実行せず、何が欠けているのか理解できません。
ここに問題があります...フォームが含まれているjspがあります。フォームが(JavaScriptを介して)送信されるとき、親ウィンドウが常に別のページにリダイレクトされるようにしたい。ただし、ユーザーの入力値によっては、条件付きで別のウィンドウを開き、そのウィンドウを別のページにリダイレクトしたい場合もあります。したがって、常に親をリダイレクトし、場合によっては子を開いてリダイレクトします。
jspの私のコード:
<script>
function handleFormSubmit() {
var form = document.getElementById("myForm");
...
if (checkbox.checked) {
// this code creates the child window, but ONLY if the checkbox is checked
myForm.setAttribute("target", "newResultPage");
window.open("childpage.jsp", "newResultPage", "width=850,height=550,...");
}
form.submit();
}
</script>
そして、これがhtmlフォームです。
<form id='myForm' method='post' action='someAction' accept-charset='UTF-8'>
// some hidden input elements here
</form>
そしてサーブレットロジック:
public class MyServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String redirectedPage = "/parentPage";
if (someCondition) {
redirectedPage = "/childpage.jsp";
}
RequestDispatcher reqDispatcher = getServletConfig().getServletContext().getRequestDispatcher(redirectedPage);
reqDispatcher.forward(request,response);
}
}
条件が満たされない場合、すべてが正常に機能します。サーブレットが呼び出され、呼び出し元のページがparentPageにリダイレクトされます。ただし、条件が満たされた場合、サーブレットは新しい子ウィンドウでchildpage.jspを正しく開きますが、呼び出し元のページをparentPageにリダイレクトしません。
明示的なredirect( "parentPage.jsp");を追加してみました。form.submit();の後 、しかし、それは競合状態を作成し、フォームが送信された後に何も呼び出されるべきではないため、良い解決策ではありません。
また、サーブレット内のロジックを変更し、条件が検出された場合にのみリダイレクトしようとしました。ただし、これにより、条件が存在しない場合に問題が発生します。これは、サーブレットが次にユーザーを送信する場所を認識していないためです。
複数のフォームをサーブレットに渡してJava経由で処理する方法はありますか?どんな助けでも大歓迎です。
-ボブ