解決したいこと
今Webアプリを作っています。入力フォームに値を保持したいのですが、うまくいきません。
表以外はうまくいったのですが、表の中の入力フォームはうまく値を保持することができませんでした
ネットでも色々調べたのですが、そもそもtableを入力フォームにしている事例があまりなく困っています
発生している問題・エラー
1,2枚目で入力して投稿ボタンを押してエラーがあった場合1,2枚目で入力した値をそのままにしたいのですが3,4枚目のとおりうまくいってません。
該当するソースコード
java
1<form method="POST" action="<c:url value='/purchases/new' />"> 2 3 <label for="title">現場名</label><br /> 4 <input type="text" name="title" value="${purchase.title}" /> 5 <br /> 6 7 <label for="delivery_date">発注日</label><br /> 8 <input type="date" name="delivery_date" value="${purchase.delivery_date}" /> 9 <br /> 10 11 <label for="desired_delivery_date">納入希望日</label><br /> 12 <input type="date" name="desired_delivery_date" value="${purchase.desired_delivery_date }" /> 13 <br /> 14 15 <label for="delivery_plase">納品住所</label><br /> 16 <input type="text" name="delivery_plase" value="${login_orderer.address}" /> 17 <br /><br /> 18 19 <table> 20 <tbody> 21 <tr> 22 <th>品番・品名</th> 23 <th>数量</th> 24 <th>単位</th> 25 </tr> 26 <c:choose> 27 <c:when test="${errorsMap != null }"> 28 <c:forEach items="${success }" var="success" varStatus="i"> 29 <tr> 30 <c:choose> 31 <c:when test="${success.item != null }"> 32 <td><input type="text" name="items" value="${success.item }"></td> 33 </c:when> 34 <c:otherwise> 35 <td><input type="text" name="items" value=""></td> 36 </c:otherwise> 37 </c:choose> 38 <td><input type="text" name="volumes" 39 value="${success.volume }" /></td> 40 <td><select name="units"> 41 <option value="m">m</option> 42 <option value="㎡">㎡</option> 43 <option value="式">式</option> 44 <option value="ケース">ケース</option> 45 </select></td> 46 </tr> 47 </c:forEach> 48 </c:when> 49 <c:otherwise> 50 <c:forEach var="i" begin="0" end="9"> 51 <tr> 52 <td><input type="text" name="items" value=""></td> 53 <td><input type="text" name="volumes" value="" /></td> 54 <td><select name="units"> 55 <option value="m">m</option> 56 <option value="㎡">㎡</option> 57 <option value="式">式</option> 58 <option value="ケース">ケース</option> 59 </select></td> 60 </tr> 61 </c:forEach> 62 </c:otherwise> 63 </c:choose> 64 </tbody> 65 </table>
自分で試したこと
入力フォームで受け取ったものをサーブレットのpostで"items"や"volumes"をListにいれてjspで出力したり
hashmapに入れてみたりpをjspで出力したりいろいろ試した結果サーブレットではなくjspがうまく書けていないのではないかと思っています。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答4件
0
ベストアンサー
サーブレット+JSP(+JSTL)で表形式の入力をする場合は、以下の点に留意します。
- 同一名のパラメータを受け取るには、String[] value s= request.getParameterValues(パラメータ名) を用いる
- 送信するパラメータの長さにあわせて配列の長さを決めるか、初期長さを決めておかないとエラーになりやすい
- JSTLは連想配列でも固定長の配列でも同じ記述で繰り返し表示ができる
例えばサーブレットは以下のように、値がない場合は初期配列10になるよう調整します。(getとpostで同じ実装ですが、特に変更内容が変わらないだけですので、メソッドの統合はしていません)
java
1import java.io.IOException; 2 3import javax.servlet.ServletException; 4import javax.servlet.annotation.WebServlet; 5import javax.servlet.http.HttpServlet; 6import javax.servlet.http.HttpServletRequest; 7import javax.servlet.http.HttpServletResponse; 8 9@WebServlet("/TableServlet") 10public class TableServlet extends HttpServlet { 11 12 final int SIZE = 10; 13 14 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 15 16 String[] items = convertBlank(request.getParameterValues("items")); 17 String[] volumes = convertBlank(request.getParameterValues("volumes")); 18 String[] units = convertBlank(request.getParameterValues("units")); 19 20 request.setAttribute("items", items); 21 request.setAttribute("volumes", volumes); 22 request.setAttribute("units", units); 23 24 request.getRequestDispatcher("tableInput.jsp").forward(request, response); 25 } 26 27 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 28 request.setCharacterEncoding("utf-8"); 29 30 String[] items = convertBlank(request.getParameterValues("items")); 31 String[] volumes = convertBlank(request.getParameterValues("volumes")); 32 String[] units = convertBlank(request.getParameterValues("units")); 33 34 request.setAttribute("items", items); 35 request.setAttribute("volumes", volumes); 36 request.setAttribute("units", units); 37 38 request.getRequestDispatcher("tableInput.jsp").forward(request, response); 39 } 40 41 private String[] convertBlank(String[] values) { 42 if (values == null) { 43 return new String[SIZE]; 44 } 45 46 return values; 47 } 48 49} 50
これを表形式で表示するJSPは、例えば以下のようになるでしょう。
jsp
1<%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 4<!DOCTYPE html> 5<html> 6<head> 7<meta charset="UTF-8"> 8<title>表形式の入出力</title> 9</head> 10<body> 11 <form method="POST" action="TableServlet"> 12 <table> 13 <thead> 14 <tr> 15 <th>品番・品名</th> 16 <th>数量</th> 17 <th>単位</th> 18 </tr> 19 </thead> 20 <tbody> 21 <c:forEach var="i" begin="0" end="9"> 22 <tr> 23 <td><input type="text" name="items" value="<c:out value='${items[i]}' />"></td> 24 <td><input type="text" name="volumes" value="<c:out value='${volumes[i]}' />" /></td> 25 <td><select name="units"> 26 <option value="1" <c:if test="${'1' == units[i]}">SELECTED</c:if>>m</option> 27 <option value="2" <c:if test="${'2' == units[i]}">SELECTED</c:if>>㎡</option> 28 <option value="3" <c:if test="${'3' == units[i]}">SELECTED</c:if>>式</option> 29 <option value="4" <c:if test="${'4' == units[i]}">SELECTED</c:if>>ケース</option> 30 </select> 31 </td> 32 </tr> 33 </c:forEach> 34 </tbody> 35 </table> 36 <input type="submit" value="送信"> 37 </form> 38</body> 39</html>
リストボックスの箇所については、valueの値は表示するための文字列ではなく、何らかのコード値(ここでは上から1~4の数値を割り振った)にした方が実装しやすくなるかと思います。
投稿2020/10/02 03:33
総合スコア12011
0
java
1package controller.purchases; 2 3import java.io.IOException; 4import java.sql.Date; 5import java.sql.Timestamp; 6import java.util.ArrayList; 7import java.util.HashMap; 8import java.util.List; 9import java.util.Map; 10import javax.persistence.EntityManager; 11import javax.servlet.RequestDispatcher; 12import javax.servlet.ServletException; 13import javax.servlet.annotation.WebServlet; 14import javax.servlet.http.HttpServlet; 15import javax.servlet.http.HttpServletRequest; 16import javax.servlet.http.HttpServletResponse; 17import models.Connection; 18import models.Contractor; 19import models.Orderer; 20import models.Purchase; 21import models.validators.PurchaseTableErrorsValidator; 22import utils.DBUtil; 23/** 24 * Servlet implementation class PurchasesNewServlet 25 */ 26@WebServlet("/purchases/new") 27public class PurchasesNewServlet extends HttpServlet { 28 private static final long serialVersionUID = 1L; 29 /** 30 * @see HttpServlet#HttpServlet() 31 */ 32 public PurchasesNewServlet() { 33 super(); 34 // TODO Auto-generated constructor stub 35 } 36 /** 37 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 38 */ 39 protected void doGet(HttpServletRequest request, HttpServletResponse response) 40 throws ServletException, IOException { 41 EntityManager em = DBUtil.createEntityManager(); 42 43 Connection select_connection = (Connection) request.getSession().getAttribute("select_connection"); 44 45 em.close(); 46 47 request.setAttribute("connection", select_connection); 48 request.setAttribute("_token", request.getSession().getId()); 49 50 Purchase p = new Purchase(); 51 p.setDelivery_date(new Date(System.currentTimeMillis())); 52 p.setDesired_delivery_date(new Date(System.currentTimeMillis())); 53 request.setAttribute("purchase", p); 54 55 List<Integer> space = new ArrayList <Integer>(); 56 int s = 0; 57 for(int i = 0; i < 10; i++) { 58 space.add(s + 1); 59 } 60 request.setAttribute("space", space); 61 62 RequestDispatcher rd = request.getRequestDispatcher("/WEB-INF/views/purchases/new.jsp"); 63 rd.forward(request, response); 64 } 65 /** 66 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 67 */ 68 protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException { 69 String _token = (String) request.getParameter("_token"); 70 if (_token != null && _token.equals(request.getSession().getId())) { 71 EntityManager em = DBUtil.createEntityManager(); 72 73 Map<Integer, List<String>> errorsMap = new HashMap<Integer, List<String>>(); 74 List<String> tableErrors = new ArrayList <String>(); 75 76 List<String> otherErrors = new ArrayList <String>(); 77 String title_error = request.getParameter("title"); 78 if(title_error == null || title_error.equals("")) { 79 otherErrors.add("現場名を入力してください。"); 80 } 81 String deliveryPlase_error = request.getParameter("delivery_plase"); 82 if(deliveryPlase_error == null || deliveryPlase_error.equals("")) { 83 otherErrors.add("現場住所を入力してください。"); 84 } 85 86 List<Purchase> blankErrors = new ArrayList <Purchase>(); 87 88 List<Purchase> success = new ArrayList <Purchase>(); 89 90 List<String> tableList = new ArrayList <String>(); 91 92 String[] itemList = (String[])request.getParameterValues("items"); 93 String[] volumeList = (String[])request.getParameterValues("volumes"); 94 95 Purchase p = new Purchase(); 96 for (int i = 0; i < itemList.length; i++) { 97 98 p.setOrderer((Orderer) request.getSession().getAttribute("login_orderer")); 99 p.setContractor((Contractor) request.getSession().getAttribute("select_contractor")); 100 101 p.setTitle(request.getParameter("title")); 102 103 Date delivery_date = new Date(System.currentTimeMillis()); 104 String dd_str = request.getParameter("delivery_date"); 105 if (dd_str != null && !dd_str.equals("")) { 106 delivery_date = Date.valueOf(request.getParameter("delivery_date")); 107 } 108 p.setDelivery_date(delivery_date); 109 110 Date desired_delivery_date = new Date(System.currentTimeMillis()); 111 String ddd_str = request.getParameter("desired_delivery_date"); 112 if (ddd_str != null && !ddd_str.equals("")) { 113 desired_delivery_date = Date.valueOf(request.getParameter("desired_delivery_date")); 114 } 115 p.setDesired_delivery_date(desired_delivery_date); 116 117 p.setDelivery_plase(request.getParameter("delivery_plase")); 118 119 String[] item = request.getParameterValues("items"); 120 p.setItem(item[i]); 121 122 String[] volumes = request.getParameterValues("volumes"); 123 try { 124 int volume = Integer.parseInt(volumes[i]); 125 p.setVolume(volume); 126 } catch(NumberFormatException e) { 127 128 } 129 130 String[] unit = request.getParameterValues("units"); 131 p.setUnit(unit[i]); 132 133 p.setRemarks(request.getParameter("remarks")); 134 135 Timestamp currentTime = new Timestamp(System.currentTimeMillis()); 136 p.setCreated_at(currentTime); 137 p.setUpdated_at(currentTime); 138 p.setDelete_flag(0); 139 140 tableErrors = PurchaseTableErrorsValidator.validate(p); 141 142 success.add(p); 143 144 if (!itemList[i].equals("") || !volumeList[i].equals("")) { 145 errorsMap.put(i, tableErrors); 146 } else if(itemList[i].equals("") && volumeList[i].equals("")) { 147 blankErrors.add(p); 148 } else { 149 em.getTransaction().begin(); 150 em.persist(p); 151 em.getTransaction().commit(); 152 153 } 154 } 155 156 em.close(); 157 158 if(errorsMap.size() > 0 || otherErrors.size() > 0 || blankErrors.size() > 0) { 159 160 Orderer login_orderer = (Orderer)request.getSession().getAttribute("login_orderer"); 161 Connection select_connection = (Connection) request.getSession().getAttribute("select_connection"); 162 163 String blankLine = "単価、数量が何も入力されていません。"; 164 165 List<Integer> space = new ArrayList <Integer>(); 166 int s = 0; 167 for(int i = 0; i < 10; i++) { 168 space.add(s + 1); 169 } 170 request.setAttribute("space", space); 171 172 request.setAttribute("login_orderer", login_orderer); 173 request.setAttribute("connection", select_connection); 174 175 request.setAttribute("_token", request.getSession().getId()); 176 177 request.setAttribute("space", space); 178 179 request.setAttribute("tableList", tableList); 180 181 request.setAttribute("errorsMap", errorsMap); 182 request.setAttribute("otherErrors", otherErrors); 183 request.setAttribute("tableErrors", tableErrors); 184 request.setAttribute("blankLine", blankLine); 185 186 request.setAttribute("purchase", p); 187 request.setAttribute("success", success); 188 189 request.setAttribute("flush", "入力内容にエラーがあります"); 190 191 RequestDispatcher rd = request.getRequestDispatcher("/WEB-INF/views/purchases/new.jsp"); 192 rd.forward(request, response); 193 194 } else { 195 request.getSession().setAttribute("flush", "登録が完了しました。"); 196 response.sendRedirect(request.getContextPath() + "/orderers/index"); 197 } 198 } 199 } 200} 201```> jspを表示させているgetとjspから送られてきた情報を受け取るpostがあるサーブレットになります。
投稿2020/10/02 09:23
総合スコア2
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
java
1package controller.purchases; 2 3import java.io.IOException; 4import java.sql.Date; 5import java.sql.Timestamp; 6import java.util.ArrayList; 7import java.util.HashMap; 8import java.util.List; 9import java.util.Map; 10 11import javax.persistence.EntityManager; 12import javax.servlet.RequestDispatcher; 13import javax.servlet.ServletException; 14import javax.servlet.annotation.WebServlet; 15import javax.servlet.http.HttpServlet; 16import javax.servlet.http.HttpServletRequest; 17import javax.servlet.http.HttpServletResponse; 18 19import models.Connection; 20import models.Contractor; 21import models.Orderer; 22import models.Purchase; 23import models.validators.PurchaseTableErrorsValidator; 24import utils.DBUtil; 25 26/** 27 * Servlet implementation class PurchasesNewServlet 28 */ 29@WebServlet("/purchases/new") 30public class PurchasesNewServlet extends HttpServlet { 31 private static final long serialVersionUID = 1L; 32 33 /** 34 * @see HttpServlet#HttpServlet() 35 */ 36 public PurchasesNewServlet() { 37 super(); 38 // TODO Auto-generated constructor stub 39 } 40 41 /** 42 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 43 */ 44 protected void doGet(HttpServletRequest request, HttpServletResponse response) 45 throws ServletException, IOException { 46 EntityManager em = DBUtil.createEntityManager(); 47 48 Connection select_connection = (Connection) request.getSession().getAttribute("select_connection"); 49 50 em.close(); 51 52 request.setAttribute("connection", select_connection); 53 request.setAttribute("_token", request.getSession().getId()); 54 55 Purchase p = new Purchase(); 56 p.setDelivery_date(new Date(System.currentTimeMillis())); 57 p.setDesired_delivery_date(new Date(System.currentTimeMillis())); 58 request.setAttribute("purchase", p); 59 60 List<Integer> space = new ArrayList <Integer>(); 61 int s = 0; 62 for(int i = 0; i < 10; i++) { 63 space.add(s + 1); 64 } 65 request.setAttribute("space", space); 66 67 RequestDispatcher rd = request.getRequestDispatcher("/WEB-INF/views/purchases/new.jsp"); 68 rd.forward(request, response); 69 } 70 71 /** 72 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 73 */ 74 protected void doPost(HttpServletRequest request, HttpServletResponse response) 75 throws ServletException, IOException { 76 String _token = (String) request.getParameter("_token"); 77 if (_token != null && _token.equals(request.getSession().getId())) { 78 EntityManager em = DBUtil.createEntityManager(); 79 80 Map<Integer, List<String>> errorsMap = new HashMap<Integer, List<String>>(); 81 List<String> tableErrors = new ArrayList <String>(); 82 83 List<String> otherErrors = new ArrayList <String>(); 84 String title_error = request.getParameter("title"); 85 if(title_error == null || title_error.equals("")) { 86 otherErrors.add("現場名を入力してください。"); 87 } 88 String deliveryPlase_error = request.getParameter("delivery_plase"); 89 if(deliveryPlase_error == null || deliveryPlase_error.equals("")) { 90 otherErrors.add("現場住所を入力してください。"); 91 } 92 93 List<Purchase> blankErrors = new ArrayList <Purchase>(); 94 95 List<Purchase> success = new ArrayList <Purchase>(); 96 97 List<String> tableList = new ArrayList <String>(); 98 99 String[] itemList = (String[])request.getParameterValues("items"); 100 String[] volumeList = (String[])request.getParameterValues("volumes"); 101 102 Purchase p = new Purchase(); 103 for (int i = 0; i < itemList.length; i++) { //フォームから入力したデータ文だけ繰り返す 104 105 p.setOrderer((Orderer) request.getSession().getAttribute("login_orderer")); 106 p.setContractor((Contractor) request.getSession().getAttribute("select_contractor")); 107 108 p.setTitle(request.getParameter("title")); 109 110 Date delivery_date = new Date(System.currentTimeMillis()); 111 String dd_str = request.getParameter("delivery_date"); 112 if (dd_str != null && !dd_str.equals("")) { 113 delivery_date = Date.valueOf(request.getParameter("delivery_date")); 114 } 115 p.setDelivery_date(delivery_date); 116 117 Date desired_delivery_date = new Date(System.currentTimeMillis()); 118 String ddd_str = request.getParameter("desired_delivery_date"); 119 if (ddd_str != null && !ddd_str.equals("")) { 120 desired_delivery_date = Date.valueOf(request.getParameter("desired_delivery_date")); 121 } 122 p.setDesired_delivery_date(desired_delivery_date); 123 124 p.setDelivery_plase(request.getParameter("delivery_plase")); 125 126 String[] item = request.getParameterValues("items"); 127 p.setItem(item[i]); 128 129 String[] volumes = request.getParameterValues("volumes"); 130 try { 131 int volume = Integer.parseInt(volumes[i]); 132 p.setVolume(volume); 133 } catch(NumberFormatException e) { 134 135 } 136 137 String[] unit = request.getParameterValues("units"); 138 p.setUnit(unit[i]); 139 140 p.setRemarks(request.getParameter("remarks")); 141 142 Timestamp currentTime = new Timestamp(System.currentTimeMillis()); 143 p.setCreated_at(currentTime); 144 p.setUpdated_at(currentTime); 145 p.setDelete_flag(0); 146 147 tableErrors = PurchaseTableErrorsValidator.validate(p); 148 149 success.add(p); 150 151 if (!itemList[i].equals("") || !volumeList[i].equals("")) { 152 errorsMap.put(i, tableErrors); 153 } else if(itemList[i].equals("") && volumeList[i].equals("")) { 154 blankErrors.add(p); 155 } else { 156 em.getTransaction().begin(); 157 em.persist(p); 158 em.getTransaction().commit(); 159 160 } 161 } 162 163 em.close(); 164 165 if(errorsMap.size() > 0 || otherErrors.size() > 0 || blankErrors.size() > 0) { 166 167 Orderer login_orderer = (Orderer)request.getSession().getAttribute("login_orderer"); 168 Connection select_connection = (Connection) request.getSession().getAttribute("select_connection"); 169 170 String blankLine = "単価、数量が何も入力されていません。"; 171 172 List<Integer> space = new ArrayList <Integer>(); 173 int s = 0; 174 for(int i = 0; i < 10; i++) { 175 space.add(s + 1); 176 } 177 request.setAttribute("space", space); 178 179 request.setAttribute("login_orderer", login_orderer); 180 request.setAttribute("connection", select_connection); 181 182 request.setAttribute("_token", request.getSession().getId()); 183 184 request.setAttribute("space", space); 185 186 request.setAttribute("tableList", tableList); 187 188 request.setAttribute("errorsMap", errorsMap); 189 request.setAttribute("otherErrors", otherErrors); 190 request.setAttribute("tableErrors", tableErrors); 191 request.setAttribute("blankLine", blankLine); 192 193 request.setAttribute("purchase", p); 194 request.setAttribute("success", success); 195 196 request.setAttribute("flush", "入力内容にエラーがあります"); 197 198 RequestDispatcher rd = request.getRequestDispatcher("/WEB-INF/views/purchases/new.jsp"); 199 rd.forward(request, response); 200 201 } else { 202 request.getSession().setAttribute("flush", "登録が完了しました。"); 203 response.sendRedirect(request.getContextPath() + "/orderers/index"); 204 } 205 } 206 } 207} 208 209```> jspを表示させているgetとjspから送られてきた情報を受け取るpostがあるサーブレットになります。
投稿2020/10/02 09:18
総合スコア2
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
java
1package controller.purchases; 2 3import java.io.IOException; 4import java.sql.Date; 5import java.sql.Timestamp; 6import java.util.ArrayList; 7import java.util.HashMap; 8import java.util.List; 9import java.util.Map; 10 11import javax.persistence.EntityManager; 12import javax.servlet.RequestDispatcher; 13import javax.servlet.ServletException; 14import javax.servlet.annotation.WebServlet; 15import javax.servlet.http.HttpServlet; 16import javax.servlet.http.HttpServletRequest; 17import javax.servlet.http.HttpServletResponse; 18 19import models.Connection; 20import models.Contractor; 21import models.Orderer; 22import models.Purchase; 23import models.validators.PurchaseTableErrorsValidator; 24import utils.DBUtil; 25 26/** 27 * Servlet implementation class PurchasesNewServlet 28 */ 29@WebServlet("/purchases/new") 30public class PurchasesNewServlet extends HttpServlet { 31 private static final long serialVersionUID = 1L; 32 33 /** 34 * @see HttpServlet#HttpServlet() 35 */ 36 public PurchasesNewServlet() { 37 super(); 38 // TODO Auto-generated constructor stub 39 } 40 41 /** 42 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 43 */ 44 protected void doGet(HttpServletRequest request, HttpServletResponse response) 45 throws ServletException, IOException { 46 EntityManager em = DBUtil.createEntityManager(); 47 48 Connection select_connection = (Connection) request.getSession().getAttribute("select_connection"); 49 50 em.close(); 51 52 request.setAttribute("connection", select_connection); 53 request.setAttribute("_token", request.getSession().getId()); 54 55 Purchase p = new Purchase(); 56 p.setDelivery_date(new Date(System.currentTimeMillis())); 57 p.setDesired_delivery_date(new Date(System.currentTimeMillis())); 58 request.setAttribute("purchase", p); 59 60 List<Integer> space = new ArrayList <Integer>(); 61 int s = 0; 62 for(int i = 0; i < 10; i++) { 63 space.add(s + 1); 64 } 65 request.setAttribute("space", space); 66 67 RequestDispatcher rd = request.getRequestDispatcher("/WEB-INF/views/purchases/new.jsp"); 68 rd.forward(request, response); 69 } 70 71 /** 72 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 73 */ 74 protected void doPost(HttpServletRequest request, HttpServletResponse response) 75 throws ServletException, IOException { 76 String _token = (String) request.getParameter("_token"); 77 if (_token != null && _token.equals(request.getSession().getId())) { 78 EntityManager em = DBUtil.createEntityManager(); 79 80 Map<Integer, List<String>> errorsMap = new HashMap<Integer, List<String>>(); 81 List<String> tableErrors = new ArrayList <String>(); 82 83 List<String> otherErrors = new ArrayList <String>(); 84 String title_error = request.getParameter("title"); 85 if(title_error == null || title_error.equals("")) { 86 otherErrors.add("現場名を入力してください。"); 87 } 88 String deliveryPlase_error = request.getParameter("delivery_plase"); 89 if(deliveryPlase_error == null || deliveryPlase_error.equals("")) { 90 otherErrors.add("現場住所を入力してください。"); 91 } 92 93 List<Purchase> blankErrors = new ArrayList <Purchase>(); 94 95 List<Purchase> success = new ArrayList <Purchase>(); 96 97 List<String> tableList = new ArrayList <String>(); 98 99 String[] itemList = (String[])request.getParameterValues("items"); 100 String[] volumeList = (String[])request.getParameterValues("volumes"); 101 102 Purchase p = new Purchase(); 103 for (int i = 0; i < itemList.length; i++) { //フォームから入力したデータ文だけ繰り返す 104 105 p.setOrderer((Orderer) request.getSession().getAttribute("login_orderer")); 106 p.setContractor((Contractor) request.getSession().getAttribute("select_contractor")); 107 108 p.setTitle(request.getParameter("title")); 109 110 Date delivery_date = new Date(System.currentTimeMillis()); 111 String dd_str = request.getParameter("delivery_date"); 112 if (dd_str != null && !dd_str.equals("")) { 113 delivery_date = Date.valueOf(request.getParameter("delivery_date")); 114 } 115 p.setDelivery_date(delivery_date); 116 117 Date desired_delivery_date = new Date(System.currentTimeMillis()); 118 String ddd_str = request.getParameter("desired_delivery_date"); 119 if (ddd_str != null && !ddd_str.equals("")) { 120 desired_delivery_date = Date.valueOf(request.getParameter("desired_delivery_date")); 121 } 122 p.setDesired_delivery_date(desired_delivery_date); 123 124 p.setDelivery_plase(request.getParameter("delivery_plase")); 125 126 String[] item = request.getParameterValues("items"); 127 p.setItem(item[i]); 128 129 String[] volumes = request.getParameterValues("volumes"); 130 try { 131 int volume = Integer.parseInt(volumes[i]); 132 p.setVolume(volume); 133 } catch(NumberFormatException e) { 134 135 } 136 137 String[] unit = request.getParameterValues("units"); 138 p.setUnit(unit[i]); 139 140 p.setRemarks(request.getParameter("remarks")); 141 142 Timestamp currentTime = new Timestamp(System.currentTimeMillis()); 143 p.setCreated_at(currentTime); 144 p.setUpdated_at(currentTime); 145 p.setDelete_flag(0); 146 147 tableErrors = PurchaseTableErrorsValidator.validate(p); 148 149 success.add(p); 150 151 if (!itemList[i].equals("") || !volumeList[i].equals("")) { 152 errorsMap.put(i, tableErrors); 153 } else if(itemList[i].equals("") && volumeList[i].equals("")) { 154 blankErrors.add(p); 155 } else { 156 em.getTransaction().begin(); 157 em.persist(p); 158 em.getTransaction().commit(); 159 160 } 161 } 162 163 em.close(); 164 165 if(errorsMap.size() > 0 || otherErrors.size() > 0 || blankErrors.size() > 0) { 166 167 Orderer login_orderer = (Orderer)request.getSession().getAttribute("login_orderer"); 168 Connection select_connection = (Connection) request.getSession().getAttribute("select_connection"); 169 170 String blankLine = "単価、数量が何も入力されていません。"; 171 172 List<Integer> space = new ArrayList <Integer>(); 173 int s = 0; 174 for(int i = 0; i < 10; i++) { 175 space.add(s + 1); 176 } 177 request.setAttribute("space", space); 178 179 request.setAttribute("login_orderer", login_orderer); 180 request.setAttribute("connection", select_connection); 181 182 request.setAttribute("_token", request.getSession().getId()); 183 184 request.setAttribute("space", space); 185 186 request.setAttribute("tableList", tableList); 187 188 request.setAttribute("errorsMap", errorsMap); 189 request.setAttribute("otherErrors", otherErrors); 190 request.setAttribute("tableErrors", tableErrors); 191 request.setAttribute("blankLine", blankLine); 192 193 request.setAttribute("purchase", p); 194 request.setAttribute("success", success); 195 196 request.setAttribute("flush", "入力内容にエラーがあります"); 197 198 RequestDispatcher rd = request.getRequestDispatcher("/WEB-INF/views/purchases/new.jsp"); 199 rd.forward(request, response); 200 201 } else { 202 request.getSession().setAttribute("flush", "登録が完了しました。"); 203 response.sendRedirect(request.getContextPath() + "/orderers/index"); 204 } 205 } 206 } 207} 208
投稿2020/10/02 09:13
総合スコア2
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/10/02 10:25