🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
JSP

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

MVC

MVC(Model View Controller)は、オブジェクト指向プログラミングにおけるモデル・ビュー・コントローラーの総称であり、ソフトフェア開発で使われている構築パターンとしても呼ばれます。

Java

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

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

Q&A

解決済

1回答

3680閲覧

プルダウン表示について。

naotaro0704

総合スコア19

JSP

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

MVC

MVC(Model View Controller)は、オブジェクト指向プログラミングにおけるモデル・ビュー・コントローラーの総称であり、ソフトフェア開発で使われている構築パターンとしても呼ばれます。

Java

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

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

0グッド

0クリップ

投稿2019/09/12 02:33

前提・実現したいこと

プルダウンリストを表示させたいのですが、商品データを<select>で1つ1つ打ち込んで表示させることはできました。しかし、まとめて表示させるコードに変更したくて、init.jspで変更してみたのですがプルダウンで商品が表示されなくなってしまいました。
add.jspの<select>は表示できているコードです。

該当のソースコード

SalesSystemController.java

java

1@Controller 2@RequestMapping(value = "/system") 3public class SalesSystemController { 4 5 private static final Logger logger = LoggerFactory.getLogger(SalesSystemController.class); 6 7 /** Stringの定数として次の6つを定義する */ 8 private static final String INIT = "init"; 9 private static final String ADD = "add"; 10 private static final String FIX = "fix"; 11 12 private static final String ERRMSG = "1以上の数字を入力してください。"; 13 private static final String ADDMSG = "明細に追加しました。"; 14 private static final String FIXMSG = "以下のように売上登録しました。"; 15 private static final String DELETE = "選択された明細行を削除しました。"; 16 private static final String REMOVE = "明細行を選択してください。"; 17 18 19 20 /** 初期画面を呼び出す処理 */ 21 @RequestMapping(value = "/start") 22 public String init(SalesForm form, Model model) { 23 /** RecordManagerにItemListを格納する */ 24 model.addAttribute("ItemList", RecordManager.getItemList()); 25 /** RecordManagerにNameListを作成する */ 26 model.addAttribute("nameList", RecordManager.makeNameList()); 27 return INIT; 28 } 29 30 /** 初期画面での明細追加押下時の処理 */ 31 @RequestMapping(params = "add", method = RequestMethod.POST) 32 public String add(@Valid @ModelAttribute("salesForm") SalesForm form, BindingResult result, Model model) { 33 34 logger.info("Post : " + form.getQuantity()); 35 36 /** 1の数字以外または未入力のときエラーとして処理 */ 37 if (result.hasErrors()) { 38 /** RecordManagerにNameListを作成する */ 39 model.addAttribute("nameList", RecordManager.makeNameList()); 40 /** エラーメッセージの表示 */ 41 model.addAttribute("message1", ERRMSG); 42 /** 初期画面へ */ 43 return INIT; 44 } 45 /** 1以上のとき正常処理 */ 46 else { 47 /** RecordManagerのselectItemにidとquantityを格納 */ 48 model.addAttribute("allList", RecordManager.selectItem(form.getId(), form.getQuantity())); 49 /** RecordManagerにNameListを作成する */ 50 model.addAttribute("nameList", RecordManager.makeNameList()); 51 /** QuantityにaddDataを格納 */ 52 model.addAttribute("addData", form.getQuantity()); 53 /** 明細追加完了のメッセージを表示 */ 54 model.addAttribute("message2", ADDMSG); 55 /** 売上に合計金額を表示 */ 56 model.addAttribute("total", RecordManager.getTotal()); 57 /** 明細追加画面へ */ 58 return ADD; 59 } 60 }

java

1public final class RecordManager<selectList> { 2 3 /** 商品データ */ 4 private static List<Item> list = new ArrayList<>(); 5 private static List<Item> selectList = new ArrayList<>(); 6 private static Item item; 7 /** totalを定義 */ 8 private static int total = 0; 9 private static long salesId; 10 private static int pos; 11 12 static { 13 list.add(new Item("A00101", "油性ボールペン", 60, 0, 0)); 14 list.add(new Item("A00201", "極細ボールペン", 120, 0, 0)); 15 list.add(new Item("A00301", "蛍光ペン6色セット", 420, 0, 0)); 16 list.add(new Item("A00401", "シャープペンシル", 100, 0, 0)); 17 list.add(new Item("A00501", "鉛筆H(1ダース)", 400, 0, 0)); 18 list.add(new Item("B00101", "無線綴ノートA4", 100, 0, 0)); 19 list.add(new Item("B00201", "リングノートA4", 120, 0, 0)); 20 list.add(new Item("B00301", "領収書", 350, 0, 0)); 21 list.add(new Item("C00101", "はさみ(青)", 128, 0, 0)); 22 list.add(new Item("C00201", "ステープラー", 338, 0, 0)); 23 list.add(new Item("C00301", "2穴パンチ", 128, 0, 0)); 24 list.add(new Item("C00401", "ゼムクリップ", 98, 0, 0)); 25 list.add(new Item("C00501", "消しゴム", 58, 0, 0)); 26 } 27 28 /** 商品名 */ 29 public static List<Item> selectItem(String id, int quantity) { 30 31 for (int i = 0; i < list.size(); i++) { 32 33 if (id.equals(list.get(i).getId())) { 34 // System.out.println(i); 35 /** Itemを再定義 */ 36 Item item = new Item(id, list.get(i).getName(), list.get(i).getPrice(), quantity, 37 quantity * list.get(i).getPrice()); 38 39 selectList.add(item); 40 41 /** xを定義 */ 42 int subtotal = quantity * list.get(i).getPrice(); 43 total = total + subtotal; 44 45 break; 46 } 47 48 } 49 50 return selectList; 51 52 } 53 54 /** nameListの作成 */ 55 public static String[] makeNameList() { 56 String[] nameList = new String[list.size()]; 57 for (int i = 0; i < list.size(); i++) { 58 nameList[i] = (list.get(i)).getName(); 59 } 60 return nameList; 61 } 62 /** idListの作成 */ 63 public static String[] makeIdList() { 64 String[] idList = new String[list.size()]; 65 for (int i = 0; i < list.size(); i++) { 66 idList[i] = (list.get(i)).getId(); 67 } 68 return idList; 69 } 70 71 72 73 74 75 /** ↓getterとsetter */ 76 77 /** itemList取得 */ 78 public static List<Item> getItemList() { 79 return list; 80 } 81 82 /** itemLista設定 */ 83 public static void setItemList() { 84 /** 設定した[item」をlist内で検索する。 */ 85 list.set(list.indexOf(item), item); 86 } 87 88 /** 89 * @return selectList 90 */ 91 public static List<Item> getSelectList() { 92 return selectList; 93 } 94 95 /** 96 * @param selectList 97 * セットする selectList 98 */ 99 public static void setSelectList(List<Item> selectList) { 100 RecordManager.selectList = selectList; 101 } 102 103 104 105 106 107 108} 109

init.jsp

jsp

1<body> 2 <form:form modelAttribute="salesForm" action="/sales/system"> 3 <div class="header"> 4 <span class="titleName">直太郎オンラインショップ</span> 5 <div class="date"><%=LocalDate.now()%></div> 6 </div> 7 8 <div class="main"> 9 <div> 10 商品: 11 <form:select> 12 <form:option path="id" value="${idList}" items="${List}"/> 13 </form:select> 14 <br /> 15 </div> 16 <div> 17 <span class="itemQuantity">点数:</span> 18 <form:input path="quantity" size="20" /> 19 </div> 20 </div> 21 22 <div class="footer"> 23 <input type="submit" name="add" value="明細追加" /> 24 </div> 25 <br> 26 <div class="message"> 27 <font color="#ff0000"> <c:out value="${message1}" /> 28 </font> 29 <font color="#1e90ff"> <c:out value="${message2}" /> 30 </font><br> 31 </div> 32 </form:form> 33</body>

add.jsp

jsp

1<body> 2 <form:form modelAttribute="salesForm" action="/sales/system"> 3 <div class="header"> 4 <span class="titleName">直太郎オンラインショップ</span> 5 <div class="date"><%=LocalDate.now()%></div> 6 </div> 7 <div class="main"> 8 <div> 9 商品: 10 <form:select path="id"> 11 12 <form:option value="A00101">油性ボールペン</form:option> 13 <form:option value="A00201">極細ボールペン</form:option> 14 <form:option value="A00301">蛍光ペン6色セット</form:option> 15 <form:option value="A00401">シャープペンシル</form:option> 16 <form:option value="A00501">鉛筆H(1ダース)</form:option> 17 <form:option value="B00101">無線綴ノートA4</form:option> 18 <form:option value="B00201">リングノートA4</form:option> 19 <form:option value="B00301">領収書</form:option> 20 <form:option value="C00101">はさみ(青)</form:option> 21 <form:option value="C00201">ステープラー</form:option> 22 <form:option value="C00301">2穴パンチ</form:option> 23 <form:option value="C00401">ゼムクリップ</form:option> 24 <form:option value="C00501">消しゴム</form:option> 25 26 </form:select> 27 28 <br /> 29 </div> 30 <div> 31 <span class="itemQuantity">点数:</span> 32 <form:input path="quantity" size="20" /> 33 </div> 34 35 <div class="add"> 36 <div> 37 <input type="submit" name="addition" value="明細追加" /> 38 </div> 39 </div> 40 </div> 41 42 <br> 43 <div class="message"> 44 <font color="#ff0000"> <c:out value="${message1}" /> 45 </font> 46 <font color="#1e90ff"> <c:out value="${message2}" /> 47 <font color="#1e90ff"> <c:out value="${message4}" /> 48 </font> 49 </font> 50 <font color="#ff0000"> <c:out value="${message5}" /> 51 </font> 52 </div> 53 <br> 54 55 56 57 <div class=""> 58 <span class="details">売上明細</span> 59 60 <table class="product"> 61 62 <tr> 63 <th>削除</th> 64 <th>商品ID</th> 65 <th>商品名</th> 66 <th>単価</th> 67 <th>点数</th> 68 <th>小計</th> 69 </tr> 70 <c:forEach items="${allList}" var="allList" varStatus="status" > 71 <tr> 72 <th class="itemradiobtn"> 73 <form:radiobutton path="name" name="delete" label="" value="${status.index}" /></th> 74 <th class="id">${allList.id}</th> 75 <th class="name">${allList.name}</th> 76 <th class="price">${allList.price}</th> 77 <th class="quantity">${allList.quantity}</th> 78 <th class="subtotal">${allList.subtotal}</th> 79 </tr> 80 </c:forEach> 81 </table> 82 </div> 83 84 <div class="total"> 85 合計: 86 <fmt:formatNumber groupingUsed="true"> 87 <c:out value="${total}" /> 88 </fmt:formatNumber> 8990 </div> 91 92 93 <div class="footer"> 94 95 <input type="submit" name="remove" value="削除" 96 onclick="remove_row(this)" /> <input type="submit" name="firm" 97 value="確定" /> 98 </div> 99 100 </form:form> 101 102</body>

試したこと

SalesSystemController.javaの

model.addAttribute("nameList", RecordManager.makeNameList());

の部分とinit.jspの

<form:option path="id" value="${idList}" items="${nameList}"/>

の部分のnameListとidListを入れ替えたりしてみましたがうまくいきませんでした。

補足情報(FW/ツールのバージョンなど)

clipse Java EE IDE for Web Developers.
Version: Mars.2 Release (4.5.2)
ローカルホストTomcat8

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

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

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

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

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

guest

回答1

0

ベストアンサー

Controllerでinit.jspを表示していると思われる箇所の実装では、nameList の名前で定義しているものが、init.jspにはありませんので、form:selectの子要素である form:optionではなく、form:options に記載しましょう。

list形式で動的に option タグを生成する場合は、form:options を使います。

以下の記事で簡単な例がありますので、参考にされると良いでしょう。

https://sites.google.com/site/soracane/home/springnitsuite/spring-mvc/80-can-kao-spring-mvcnojsptagurifarensu#TOC-form:option-form:options-

投稿2019/09/12 03:21

A-pZ

総合スコア12011

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

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

naotaro0704

2019/09/12 04:08

回答ありがとうございます。指摘していただいたとおりに訂正したところ表示されました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問