質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

4回答

22361閲覧

form:select selctedの設定に関して

Katsu-Ishii

総合スコア15

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2017/10/18 19:21

###セレクトボックス状態の初期化
Springフレームワーク(Java, jsp)を用いたWEBシステムの開発をしています。

セレクトボックスの値の制御に関してなのですが、ページが変わるたびにセレクトボックスの選択状態を常に選択肢の一番上としたいと考えております。しかし、現状ではページが遷移しても前ページの選択状態が引き継がれてしまっています。(2番目や3番目になってしまっている。)

selected="selected" を form:foreachタグの中にあるc:ifタグにて制御して要件を満たそうと試みておりますが、状態が引き継がれてしまいます。

どのようなアプローチをすればよいでしょうか。よろしくお願いいたします。
(ただし、JavaScriptは使用しない)

###現在のソースコード

sample.jsp:

1sampleController.java 必要な個所のみ記載 2------------------------------------------------------------------------ 3 4//あるForm処理で呼び出されるメソッド 5@RequestMapping(params = "add", method = RequestMethod.POST) 6public String add(@Valid SampleForm form, BindingResult result, Model model){ 7 8 //productNameListは、String型の配列 9 model.addAttribute("productList", productNameList); 10 model.addAttribute("initProduct", "productNameListの一番上のアイテム名"); 11 return "sample"; 12} 13 14------------------------------------------------------------------------ 15 16sample.jsp 17------------------------------------------------------------------------ 18<form:select path="productName"> 19 <c:forEach items="${productList}" var="product" varStatus="loop"> 20 <c:choose> 21 <c:when test="${product == initProduct }"> 22 <form:option value="${product}" selected="selected"/> 23 </c:when> 24 <c:otherwise> 25 <form:option value="${product}"/> 26 </c:otherwise> 27 </c:choose> 28 </c:forEach> 29</form:select> 30------------------------------------------------------------------------

###補足情報(言語/FW/ツール等のバージョンなど)
Java8
springframework-version 4.1.7

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yuki-saito

2017/10/19 00:34

ページ遷移した際に再描画が走っているのですかね?引き継がれているということはselectedも一番上ではないところに付いたままだということでしょうか?
Katsu-Ishii

2017/10/19 02:59 編集

投稿ありがとうございます。仰る通りです。前ページで入力したアイテムのタグにselectedがついたままになっています。
guest

回答4

0

<form:select path="productName"> <form:options items="${productList}"/> </form:select>

でやれば自動選択されませんでした?

投稿2017/10/19 03:26

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Katsu-Ishii

2017/11/02 02:40

自動選択されるのですが、前ページで選択されたアイテムにもselectが残り、そちらが優先されて表示されてしまいました。
guest

0

初期表示でselectedが先頭についているのであればコードは正しいのではないかと思います。
まずはそこを確認してみてください。

その後別の選択肢を選んでselectedが移動したあとにページ遷移した時このサーバサイドの処理は動いているのでしょうか?
単純に動いていないから変わらないのではないかと思いました。

初期表示では正してできていて、ページ遷移でも動いているのに戻らないということはないような気がしますが・・・。

投稿2017/10/19 03:10

yuki-saito

総合スコア928

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Katsu-Ishii

2017/11/02 02:41

サーバサイドのformに値が設定されていないためでした。 助言に感謝いたします。
guest

0

htmlとして、select タグは、selectedを指定しなければ、1番上が選択されます。

なので、スマートなやり方ではありませんが、それを利用して、modelのプロパティに何もセットしない、for eachで <option>タグを出力だけすれば、1番上(先頭)が選択されると思います。

投稿2017/10/19 01:57

kuniku

総合スコア253

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Katsu-Ishii

2017/11/02 02:40 編集

回答ありがとうございます。 私もmodelプロパティに何もセットしなければ、一番上の(先頭)が表示されると考えていましたが、前ページで入力されたアイテムの<option>タグの中に selected が出てきてしまいます。 ※なお質問内容に漏れていたのですが正常な動作での画面遷移の場合には、セレクトボックスの初期値を先頭のものにし、異常値が入力された場合のエラー処理では、選択されたものはそのまま引き継いで次ページに遷移させたいこともあり、毎度selectedを定義しています。記載漏れ失礼しました。
guest

0

自己解決

今回Springフレームワークを使用しているということで、addメソッドに渡しているformに値をセットすることで、目的を達成できました。

Java

1form.setProductName("productNameListの一番上のアイテム名");

なお、解答を頂いた皆様ありがとうございました。

投稿2017/11/02 02:37

Katsu-Ishii

総合スコア15

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問