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

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

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

foreachは、List・Collection・Arrayといったデータ構造の各要素に対して繰り返し処理を実行するために扱われる、制御構造の構文です。

Hibernate

HibernateとはJava言語のobject-relational mapping (ORM)ライブラリであり、Object/Relational Mappingよりはるか多くの方法でアプリケーションをPOJOで機能付けることができます。

JSP

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

Java

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

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Q&A

解決済

4回答

14567閲覧

入力フォームの値を保持したい

ryo-0213

総合スコア2

foreach

foreachは、List・Collection・Arrayといったデータ構造の各要素に対して繰り返し処理を実行するために扱われる、制御構造の構文です。

Hibernate

HibernateとはJava言語のobject-relational mapping (ORM)ライブラリであり、Object/Relational Mappingよりはるか多くの方法でアプリケーションをPOJOで機能付けることができます。

JSP

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

Java

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

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

0グッド

1クリップ

投稿2020/09/29 08:25

編集2020/10/02 02:26

解決したいこと

今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"></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"></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ページで確認できます。

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

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

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

guest

回答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

A-pZ

総合スコア12011

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

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

ryo-0213

2020/10/02 10:25

書いていただいたコードを元に修正したらできました! かなりの時間、悩んでいたので助かりました。 ありがとうございます!
guest

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

ryo-0213

総合スコア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

ryo-0213

総合スコア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

ryo-0213

総合スコア2

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問