前提・実現したいこと
jspにて、セレクトボックスにenumを使用してプルダウンを入れたいです。
最終的にはプルダウンで選択されたものをenumでコードから名前を取得してDBに格納します。
発生している問題・エラーメッセージ
HTTPステータス 500 – Internal Server Errorがでます。
enum側ではintを指定していますが、どこでString型に変換されているのでしょうか?
jsp側でparseでくくってみましたがint型に変換できませんでした。
メッセージ [/WEB-INF/jsp/ProductInfo.jsp] の処理中に行番号 [23] で例外が発生しました。 説明 サーバーは予期しない条件に遭遇しました。それはリクエストの実行を妨げます。 例外 org.apache.jasper.JasperException: [/WEB-INF/jsp/ProductInfo.jsp] の処理中に行番号 [23] で例外が発生しました。 20: <select name="genre"> 21: <c:forEach var="genre" items="${ProductGenre}"> 22: <option value="${genre.genreCode}" 23: <c:if test="${ProductGenre.genreCode == genre.genreCode}">selected</c:if>> 24: ${genre.genreName}</option> 25: </c:forEach> 26: </select> 根本原因 java.lang.NumberFormatException: For input string: "genreCode" java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
該当のソースコード
enum
1public enum ProductGenre { 2 /** 「商品ジャンル」指定なし。コード値は0です。 */ 3 UNSPECIFIED(0, "指定なし"), 4 /** 「商品ジャンル」時計。コード値は1です。 */ 5 CLOCK(1, "時計"), 6 /** 「商品ジャンル」電子機器。コード値は2です。 */ 7 ELECTRONICS(2, "電子機器"), 8 /** 「商品ジャンル」携帯。コード値は3です。 */ 9 MOBILE_PHONE(3, "携帯"); 10 11 /** 商品ジャンルコード */ 12 private int genreCode; 13 /** 商品ジャンル名 */ 14 private String genreName; 15 16 /** 17 * 商品ジャンルコードと商品ジャンル名を基に商品ジャンルを生成します。 18 * @param genreCode 商品ジャンルコード 19 * @param genreName 商品ジャンル名 20 */ 21 private ProductGenre(int genreCode, String genreName) { 22 this.genreCode = genreCode; 23 this.genreName = genreName; 24 } 25 26 /** 27 * 商品ジャンルコードを取得します。 28 * @return 商品ジャンルコード 29 */ 30 public int getGenreCode() { 31 return this.genreCode; 32 } 33 34 /** 35 * 商品ジャンル名を取得します。 36 * @return 商品ジャンル名 37 */ 38 public String getGenreName() { 39 return this.genreName; 40 } 41 42 public static String getNameByCode(int genreCode) { 43 for (ProductGenre pg : ProductGenre.values()) { 44 if (pg.getGenreCode() == genreCode) { 45 return pg.getGenreName(); 46 } 47 } 48 return null; 49 } 50}
Servlet
1 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 2 response.setCharacterEncoding("UTF-8"); 3 response.setContentType("text/html; charset=UTF-8"); 4 5 request.setAttribute("ProductGenre", ProductGenre.values()); 6 7 RequestDispatcher dispatch = request.getRequestDispatcher("WEB-INF/jsp/ProductInfo.jsp"); 8 dispatch.forward(request, response); 9 }
jsp
1 <div class="genre"> 2 ジャンル<br> 3 <select name="genre"> 4 <c:forEach var="genre" items="${ProductGenre}"> 5 <option value="${genre.genreCode}" 6 <c:if test="${ProductGenre.genreCode == genre.genreCode}">selected</c:if>> 7 ${genre.genreName}</option> 8 </c:forEach> 9 </select> 10 </div>
回答1件
あなたの回答
tips
プレビュー