teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

文法の修正

2020/10/02 02:26

投稿

ryo-0213
ryo-0213

スコア2

title CHANGED
@@ -1,1 +1,1 @@
1
- jspで3×10の表の入力フォームを作りたい
1
+ 入力フォームの値保持したい
body CHANGED
@@ -1,243 +1,81 @@
1
- ### 前提・実現したいこと
1
+ ### 解決したいこと
2
+ 今Webアプリを作っています。入力フォームに値を保持したいのですが、うまくいきません。
3
+ 表以外はうまくいったのですが、表の中の入力フォームはうまく値を保持することができませんでした
4
+ ネットでも色々調べたのですが、そもそもtableを入力フォームにしている事例があまりなく困っています
5
+ ### 発生している問題・エラー
6
+ 1,2枚目で入力して投稿ボタンを押してエラーがあった場合1,2枚目で入力した値をそのままにしたいのですが3,4枚目のとおりうまくいってません。
7
+ ![イメージ説明](d802c2653f7d6cfc58a871d1cf365f59.png)
8
+ ![イメージ説明](9c9844cbef5f5d1d56e3cc19652bb31c.png)
9
+ ![イメージ説明](5b01f5c79b25867812fc39e58ac3578a.png)
10
+ ![イメージ説明](10a408f7befe90256f22b4d3f15257ac.png)
11
+ ### 該当するソースコード
12
+ ```java
13
+ <form method="POST" action="<c:url value='/purchases/new' />">
2
14
 
15
+ <label for="title">現場名</label><br />
16
+ <input type="text" name="title" value="${purchase.title}" />
17
+ <br />
3
18
 
4
- <c:forEach>で繰り返し処理を行い3×10の表の入力フォームを作り、入力内容にエラーがあった場合入力フォームに値を保持したまま画面移行させたいです。
19
+ <label for="delivery_date">発注日</label><br />
20
+ <input type="date" name="delivery_date" value="${purchase.delivery_date}" />
21
+ <br />
5
22
 
23
+ <label for="desired_delivery_date">納入希望日</label><br />
24
+ <input type="date" name="desired_delivery_date" value="${purchase.desired_delivery_date }" />
25
+ <br />
6
26
 
27
+ <label for="delivery_plase">納品住所</label><br />
28
+ <input type="text" name="delivery_plase" value="${login_orderer.address}" />
7
- ### 発生している問題・エラーメッセージ
29
+ <br /><br />
8
30
 
9
- 表がうまく表示できないです。
10
-
11
- ### 該当のソースコード
31
+ <table>
12
-
13
- ```jsp
14
- <table id="purchases_form">
15
- <tbody>
32
+ <tbody>
16
- <tr>
33
+ <tr>
17
- <th class="item">品番・品名(サイズも一緒にお書きください)</th>
34
+ <th>品番・品名</th>
18
- <th class="volume">数量</th>
35
+ <th>数量</th>
19
- <th class="unit">単位</th>
36
+ <th>単位</th>
20
- </tr>
37
+ </tr>
38
+ <c:choose>
39
+ <c:when test="${errorsMap != null }">
21
- <c:forEach items="${errorsMap }" var="errorsMap" begin="0" end="9" step="1">
40
+ <c:forEach items="${success }" var="success" varStatus="i">
22
- <tr>
41
+ <tr>
23
- <td><c:choose>
42
+ <c:choose>
24
- <c:when test="${errorsMap != null }">
43
+ <c:when test="${success.item != null }">
25
- <input type="text" name="items" value="" />
44
+ <td><input type="text" name="items" value="${success.item }"></td>
26
- </c:when>
45
+ </c:when>
27
- <c:otherwise>
46
+ <c:otherwise>
28
- <input type="text" name="items" value="${purchase.items }" />
47
+ <td><input type="text" name="items" value=""></td>
29
- </c:otherwise>
48
+ </c:otherwise>
49
+ </c:choose>
50
+ <td><input type="text" name="volumes"
51
+ value="${success.volume }" /></td>
52
+ <td><select name="units">
53
+ <option value="m">m</option>
54
+ <option value="㎡">㎡</option>
55
+ <option value="式">式</option>
56
+ <option value="ケース">ケース</option>
30
- </c:choose></td>
57
+ </select></td>
31
-
58
+ </tr>
32
- <td><c:choose>
59
+ </c:forEach>
33
- <c:when test="${errors != null }">
34
- <input type="text" name="items" value="" />
35
- </c:when>
60
+ </c:when>
36
- <c:otherwise>
61
+ <c:otherwise>
62
+ <c:forEach var="i" begin="0" end="9">
63
+ <tr>
37
- <input type="text" name="items" value="${purchase.volumes }" />
64
+ <td><input type="text" name="items" value=""></td>
65
+ <td><input type="text" name="volumes" value="" /></td>
66
+ <td><select name="units">
67
+ <option value="m">m</option>
68
+ <option value="㎡">㎡</option>
69
+ <option value="式">式</option>
70
+ <option value="ケース">ケース</option>
71
+ </select></td>
72
+ </tr>
73
+ </c:forEach>
38
- </c:otherwise>
74
+ </c:otherwise>
39
- </c:choose></td>
40
-
41
- <td><c:choose>
42
- <c:when test="${errors != null }">
43
- <input type="text" name="items" value="" />
44
- </c:when>
75
+ </c:choose>
45
- <c:otherwise>
46
- <input type="text" name="items" value="${purchase.units }" />
47
- </c:otherwise>
48
- </c:choose></td>
49
- </tr>
50
- </c:forEach>
51
76
  </tbody>
52
77
  </table>
53
78
  ```
54
- ```java
55
- package controller.purchases;
56
-
57
- import java.io.IOException;
58
- import java.sql.Date;
59
- import java.sql.Timestamp;
60
- import java.util.ArrayList;
61
- import java.util.HashMap;
62
- import java.util.List;
63
- import java.util.Map;
64
-
65
- import javax.persistence.EntityManager;
66
- import javax.servlet.RequestDispatcher;
67
- import javax.servlet.ServletException;
68
- import javax.servlet.annotation.WebServlet;
69
- import javax.servlet.http.HttpServlet;
70
- import javax.servlet.http.HttpServletRequest;
71
- import javax.servlet.http.HttpServletResponse;
72
-
73
- import models.Connection;
74
- import models.Contractor;
75
- import models.Orderer;
76
- import models.Purchase;
77
- import models.validators.PurchaseTableErrorsValidator;
78
- import utils.DBUtil;
79
-
80
- /**
81
- * Servlet implementation class PurchasesNewServlet
82
- */
83
- @WebServlet("/purchases/new")
84
- public class PurchasesNewServlet extends HttpServlet {
85
- private static final long serialVersionUID = 1L;
86
-
87
- /**
88
- * @see HttpServlet#HttpServlet()
89
- */
90
- public PurchasesNewServlet() {
91
- super();
92
- // TODO Auto-generated constructor stub
93
- }
94
-
95
- /**
96
- * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
97
- */
98
- protected void doGet(HttpServletRequest request, HttpServletResponse response)
99
- throws ServletException, IOException {
100
- EntityManager em = DBUtil.createEntityManager();
101
-
102
- Map<Integer, List<String>> errorsMap = new HashMap<Integer, List<String>>();
103
- List<String> errors = new ArrayList <String>();
104
- errors.add(null);
105
-
106
- Connection select_connection = (Connection) request.getSession().getAttribute("select_connection");
107
-
108
- em.close();
109
-
110
- request.setAttribute("errorsMap", errorsMap);
111
-
112
- request.setAttribute("connection", select_connection);
113
- request.setAttribute("_token", request.getSession().getId());
114
-
115
- Purchase p = new Purchase();
116
- p.setDelivery_date(new Date(System.currentTimeMillis()));
117
- p.setDesired_delivery_date(new Date(System.currentTimeMillis()));
118
- request.setAttribute("purchase", p);
119
-
120
- RequestDispatcher rd = request.getRequestDispatcher("/WEB-INF/views/purchases/new.jsp");
121
- rd.forward(request, response);
122
- }
123
-
124
- /**
125
- * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
126
- */
127
- protected void doPost(HttpServletRequest request, HttpServletResponse response)
128
- throws ServletException, IOException {
129
- String _token = (String) request.getParameter("_token");
130
- if (_token != null && _token.equals(request.getSession().getId())) {
131
- EntityManager em = DBUtil.createEntityManager();
132
-
133
- Map<Integer, List<String>> errorsMap = new HashMap<Integer, List<String>>();
134
-
135
- String[] itemList = (String[])request.getParameterValues("items");
136
- String[] volumeList = (String[])request.getParameterValues("volumes");
137
-
138
- List<String> errors = new ArrayList <String>();
139
-
140
- List<String> errorList = new ArrayList <String>();
141
- String title = request.getParameter("title");
142
- if(title == null || title.equals("")) {
143
- errorList.add("現場名を入力してください。");
144
- }
145
- String delivery_plase = request.getParameter("delivery_plase");
146
- if(delivery_plase == null || delivery_plase.equals("")) {
147
- errorList.add("現場住所を入力してください");
148
- }
149
- Purchase p = new Purchase();
150
- for (int i = 0; i < itemList.length; i++) { //フォームから入力したデータ文だけ繰り返す
151
- if (!itemList[i].equals("") || !volumeList[i].equals("")) {
152
-
153
- p.setOrderer((Orderer) request.getSession().getAttribute("login_orderer"));
154
- p.setContractor((Contractor) request.getSession().getAttribute("select_contractor"));
155
-
156
- p.setTitle(request.getParameter("title"));
157
-
158
- Date delivery_date = new Date(System.currentTimeMillis());
159
- String dd_str = request.getParameter("delivery_date");
160
- if (dd_str != null && !dd_str.equals("")) {
161
- delivery_date = Date.valueOf(request.getParameter("delivery_date"));
162
- }
163
- p.setDelivery_date(delivery_date);
164
-
165
- Date desired_delivery_date = new Date(System.currentTimeMillis());
166
- String ddd_str = request.getParameter("desired_delivery_date");
167
- if (ddd_str != null && !ddd_str.equals("")) {
168
- desired_delivery_date = Date.valueOf(request.getParameter("desired_delivery_date"));
169
- }
170
-
171
- p.setDesired_delivery_date(desired_delivery_date);
172
-
173
- p.setDelivery_plase(request.getParameter("delivery_plase"));
174
-
175
- String[] item = request.getParameterValues("items");
176
- p.setItem(item[i]);
177
-
178
- String[] volumes = request.getParameterValues("volumes");
179
- try {
180
- int volume = Integer.parseInt(volumes[i]);
181
- p.setVolume(volume);
182
- } catch(NumberFormatException e) {
183
-
184
- }
185
-
186
- String[] unit = request.getParameterValues("units");
187
- p.setUnit(unit[i]);
188
-
189
- p.setRemarks(request.getParameter("remarks"));
190
-
191
- Timestamp currentTime = new Timestamp(System.currentTimeMillis());
192
- p.setCreated_at(currentTime);
193
- p.setUpdated_at(currentTime);
194
- p.setDelete_flag(0);
195
-
196
- errors = PurchaseTableErrorsValidator.validate(p);
197
-
198
- if (errors.size() > 0) {
199
- errorsMap.put(i, errors);
200
- } else {
201
- em.getTransaction().begin();
202
- em.persist(p);
203
- em.getTransaction().commit();
204
- }
205
- }
206
- }
207
-
208
- em.close();
209
-
210
- if(errorsMap.size() > 0 || errorList.size() > 0) {
211
-
212
- Orderer login_orderer = (Orderer)request.getSession().getAttribute("login_orderer");
213
- Connection select_connection = (Connection) request.getSession().getAttribute("select_connection");
214
-
215
- request.setAttribute("login_orderer", login_orderer);
216
- request.setAttribute("connection", select_connection);
217
- request.setAttribute("_token", request.getSession().getId());
218
- request.setAttribute("errorList", errorList);
219
- request.setAttribute("errors", errors);
220
- request.setAttribute("purchase", p);
221
- request.setAttribute("errorsMap", errorsMap);
222
- request.setAttribute("flush", "入力内容にエラーがあります");
223
-
224
- RequestDispatcher rd = request.getRequestDispatcher("/WEB-INF/views/purchases/new.jsp");
225
- rd.forward(request, response);
226
-
227
- } else {
228
- request.getSession().setAttribute("flush", "登録が完了しました。");
229
- response.sendRedirect(request.getContextPath() + "/orderers/index");
230
- }
231
- }
232
- }
233
- }
234
-
235
- ```
236
- ### 試したこと
79
+ ### 自分で試したこと
237
-
80
+ 入力フォームで受け取ったものをサーブレットのpostで"items"や"volumes"をListにいれてjspで出力したり
238
- errorsMapというHashMapnullではない場合空白、null場合は値を表示させる処理をforEach10回繰り返
81
+ hashmapに入れてみたりpjspで出力したいろいろ試した結果サーブレットではなくjspがうまく書けてないのではないかと思っていま
239
-
240
- ### 補足情報(FW/ツールのバージョンなど)
241
-
242
- EclipseのNeon.3 Release (4.6.3)を使っています。
243
- フレームワークはhibernateです。