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

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

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

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

Java

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

Spring

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

Q&A

解決済

1回答

984閲覧

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

naotaro0704

総合スコア19

MVC

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

Java

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

Spring

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

0グッド

0クリップ

投稿2019/08/29 04:16

前提・実現したいこと

SpringMVCフレームワークを使用しています。

初期画面と明細追加画面があり、初期画面の「商品」プルダウンでiteratorを使って表示したいと考えています。現在は、<form:select name="id" path="name" items="${nameList}" />のように表示させています。、SalesSystemController.javaで呼び出しをし、商品を選択して明細追加画面に行くのですがSystem.out.println(form.getId());で取得したidがnullとなってしまいます。

希望する動作としては、
1、itaretorでプルダウンを表示する。
2、取得するidがnullにならないようにする。

です。わかる方がいましたらご教授お願いします。

該当のソースコード

SalesSystemController.java

java

1package jp.practice.sales; 2 3@Controller 4@RequestMapping(value = "/system") 5public class SalesSystemController { 6 7 // private MessageSource messageSource; 8 private static final Logger logger = LoggerFactory.getLogger(SalesSystemController.class); 9 10 private static final String INIT = "init"; 11 private static final String ADD = "add"; 12 private static final String FIX = "fix"; 13 14 private static final String ERRMSG = "1以上の数字を入力してください"; 15 16 @RequestMapping(value = "/start") 17 public String init(SalesForm form, Model model) { 18// RecordManagerにItemListを格納する 19 model.addAttribute("ItemList", RecordManager.getItemList()); 20// RecordManagerにNameListを作成する 21 model.addAttribute("nameList", RecordManager.makeNameList()); 22 return INIT; 23 } 24 25 @RequestMapping(params = "add", method = RequestMethod.POST) 26 public String add(@Valid SalesForm form, BindingResult result, Model model) { 27 28 logger.info("Post : " + form.getQuantity()); 29System.out.println(form.getId()); 30 31 model.addAttribute("allList", RecordManager.selectItem(form.getName())); 32// RecordManagerにNameListを作成する 33 model.addAttribute("nameList", RecordManager.makeNameList()); 34 if (result.hasErrors()) { 35 model.addAttribute("message", ERRMSG); 36 return INIT; 37 } else { 38 model.addAttribute("addData", form.getQuantity()); 39 return ADD; 40 } 41 42 } 43} 44

SalesForm.java

java

1package jp.practice.sales; 2 3public class SalesForm implements Serializable { 4 private static final long serialVersionUID = 1L; 5 6 /** 商品id */ 7 private String id; 8 /** 商品名 */ 9 private String name; 10 /** 単価 */ 11 private int price; 12 /** 個数 */ 13 @Min(1) 14 //@Pattern(regexp = "\d") 15 @NotNull 16 private int quantity; 17 /** 小計 */ 18 private int subtotal; 19以下、上記のコンストラクタとgetterとsetterがあります 20

Item.java

java

1package jp.practice.sales; 2 3 4 5/** 6 * 売上明細1件分のデータを保持するクラス 7 */ 8public class Item { 9 10 /** 商品id */ 11 private String id; 12 /** 商品名 */ 13 private String name; 14 /** 単価 */ 15 private int price; 16 17 /** 個数 */ 18 19 private int quantity; 20 /** 小計 */ 21 private int subtotal; 22 /* 23 * (非 Javadoc) 24 * 25 * @see java.lang.Object#hashCode() 26 */ 27 @Override 28 public int hashCode() { 29 final int prime = 31; 30 int result = 1; 31 result = prime * result + quantity; 32 return result; 33 } 34 35 /* 36 * (非 Javadoc) 37 * 38 * @see java.lang.Object#equals(java.lang.Object) 39 */ 40 @Override 41 public boolean equals(Object obj) { 42 if (this == obj) { 43 return true; 44 } 45 if (obj == null) { 46 return false; 47 } 48 if (!(obj instanceof Item)) { 49 return false; 50 } 51 Item other = (Item) obj; 52 if (quantity != other.quantity) { 53 return false; 54 } 55 return true; 56 } 57 58 /** 59 * @return id 60 */ 61 public String getId() { 62 return id; 63 } 64 65 /** 66 * @param id 67 * セットする id 68 */ 69 public void setId(String id) { 70 this.id = id; 71 } 72 73 /** 74 * @return name 75 */ 76 public String getName() { 77 return name; 78 } 79 80 /** 81 * @param name 82 * セットする name 83 */ 84 public void setName(String name) { 85 this.name = name; 86 } 87 88 /** 89 * @return price 90 */ 91 public int getPrice() { 92 return price; 93 } 94 95 /** 96 * @param price 97 * セットする price 98 */ 99 public void setPrice(int price) { 100 this.price = price; 101 } 102 103 /** 104 * @return quantity 105 */ 106 public int getQuantity() { 107 return quantity; 108 } 109 110 /** 111 * @param quantity 112 * セットする quantity 113 */ 114 public void setQuantity(int quantity) { 115 this.quantity = quantity; 116 } 117 118 /** 119 * @return subtotal 120 */ 121 public int getSubtotal() { 122 return subtotal; 123 } 124 125 /** 126 * @param subtotal 127 * セットする subtotal 128 */ 129 public void setSubtotal(int subtotal) { 130 this.subtotal = subtotal; 131 } 132 133 134 135 /** 136 * コンストラクターです。 137 * 138 * @param id 139 * 商品id 140 * @param name 141 * 商品名 142 * @param price 143 * 単価 144 * @param quantity 145 * 個数 146 * @param subtotal 147 * 小計 148 */ 149 public Item(String id, String name, int price, int quantity, int subtotal) { 150 this.id = id; 151 this.name = name; 152 this.price = price; 153 this.quantity = quantity; 154 this.subtotal = subtotal; 155 } 156 157} 158// Copyright 2015 FUJITSU APPLICATIONS LIMITED

RecordManager.java

package

1 2 3//商品一覧 4/** 5 * 商品データ全体を保持するクラス 6 */ 7public final class RecordManager { 8 9 /** 商品データ */ 10 private static List<Item> list = new ArrayList<>(); 11 private static List<Item> selectList = new ArrayList<>(); 12 private static Item item; 13 14 static { 15 list.add(new Item("A00101", "油性ボールペン", 60, 0, 0)); 16 list.add(new Item("A00201", "極細ボールペン", 120, 0, 0)); 17 list.add(new Item("A00301", "蛍光ペン6色セット", 420, 0, 0)); 18 list.add(new Item("A00401", "シャープペンシル", 100, 0, 0)); 19 20 } 21 public static List<Item> selectItem(String name) { 22 Item item = new Item("",name, 0, 0, 0); 23 selectList.add(list.get(list.indexOf(item))); 24 return selectList; 25 } 26 27 public static String[] makeNameList() { 28 String[] idList = new String[list.size()]; 29 for (int i = 0; i < list.size(); i++) { 30 idList[i] = (list.get(i)).getName(); 31 } 32 return idList; 33 } 34 35 public static List<Item> getItemList() { 36 return list; 37 } 38 39 public static void setItemList() { 40 list.set(list.indexOf(item), item); 41 } 42} 43 44

init.jsp

jsp

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

add.jsp

jsp

1 2<body> 3 <form:form modelAttribute="salesForm" action="/sales/system"> 4 <div class="header"> 5 <span class="titleName">直太郎オンラインショップ</span> 6 <div class="date"><%=LocalDate.now()%></div> 7 </div> 8 <div class="main"> 9 <div> 10 商品: 11 <form:select name="id" path="name" items="${nameList}" /> 12 <br /> 13 </div> 14 <div> 15 <span class="itemQuantity">点数:</span> 16 <form:input path="quantity" size="20" /> 17 <form:errors path="quantity" /> 18 </div> 19 20 <div class="add"> 21 <div> 22 <input type="submit" name="add" value="明細追加" /> 23 </div> 24 </div> 25 </div> 26 </form:form> 27 <form:form modelAttribute="salesForm" action="/sales/system"> 28 <div class="main2"> 29 <div class="message"> 30 <c:out value="${message}" /> 31 </div> 32 <div class=""> 33 <span class="details">売上明細</span> 34 35 <table class="product"> 36 37 <tr> 38 <th>削除</th> 39 <th>商品ID</th> 40 <th>商品名</th> 41 <th>単価</th> 42 <th>点数</th> 43 <th>小計</th> 44 </tr> 45 <c:forEach items="${allList}" var="allList" varStatus="status"> 46 <tr> 47 <th><form:radiobutton path="name" label="" 48 value="radiobtn" /></th> 49 <th>${allList.id}</th> 50 <th>${allList.name}</th> 51 <th>${allList.price}</th> 52 <th>${allList.quantity}</th> 53 <th>${allList.subtotal}</th> 54 </tr> 55 </c:forEach> 56 </table> 57 </div> 58 59 <div class="total"> 60 合計: 61 <fmt:formatNumber value="${total}" groupingUsed="true" /> 6263 </div> 64 </div> 65 66 67 <div class="footer"> 68 <script type="text/javascript"> 69 function remove_row(target) { 70 var TR = target.parentNode.parentNode; 71 TR.parentNode.deleteRow(TR.rowIndex - 1); 72 } 73 </script> 74 <input type="submit" name="remove" value="削除" 75 onclick="remove_row(this)" /> <input type="submit" name="firm" 76 value="確定" /> 77 </div> 78 79 </form:form> 80 81</body> 82</html> 83

試したこと

<select><option/><select>でもプルダウン表示をしてみましたが値の変更に苦労すると思いやめました。

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

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

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

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

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

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

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

guest

回答1

0

ベストアンサー

1、itaretorでプルダウンを表示する。

init.jspの商品プルダウンは

jsp

1<form:select path="name"> 2 <form:option value="${idList}" items="${nameList}"/> 3</form:select>

のようになっていますが、<form:option>にitemsはありません。
<c:forEach><form:option>で実装するか、
コントローラーの戻り値を変更して<form:options>で実装すると良いと思います。

2、取得するidがnullにならないようにする。

コントローラーのadd()メソッドに@ModelAttributeが足りない気がします。

java

1public String add(@Valid @ModelAttribute("salesForm") SalesForm form, BindingResult result, Model model) {

なかなか見ごたえのあるコードなので、他にも問題があるかもしれません...

投稿2019/08/29 12:03

編集2019/08/29 12:05
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問