今回の問題点
JSでセッションから値を取ってきて、画面がリロードされたらセレクトボックスにJSのイベントでセッションから値を取ってくるという実装をしたが、それではバリデーションに通過せず、セレクトボックスにコース名が表示されているのに、コースを指定してくださいとエラーが出た
結論
JSでセレクトボックスに値を持ってきても、画面が表示されている時点でバリデーションチェックは終わっているので、バリデーションチェックが終わって画面が表示された後にJSで値を持ってきても、バックエンドとしてはバリデーションを通過していないことになるので注意。
この場合は、他のセレクトボックスはフォームのコンストラク(初期設定)で値を定義していたので、画面がリロードされてもエラーが起きた時でも値が保持されていた。なので、コンストラクタに最初の値を設定するように記述すれば対応できた。
実装内容は以下
※ポイント
JSで実装するのはあくまでフロント側の表面上だけをいじっているにすぎないのでバックエンドには関係がない
解決方法のポイント(重要)
確認画面で戻るボタンか実行ボタンを押した際に、通常のバリデーションエラーが起きる。他の項目はバリデーションエラーにはならない。
最初はajaxで動的に処理をしてきたから、特別な処理をしているからセッションから値を保存する必要があるとしか思っていなかったが、
そもそも他の値はバリデーションエラーが起きた時も、値は残っていた。ここに注目する必要があった
他の項目がうまくいっているなら同じようにすればいいのではないか。と考えるとヒントがある
バリデーションチェックが観にいくところ(重要)