質問編集履歴

3

追記

2021/05/17 06:16

投稿

usazk
usazk

スコア0

test CHANGED
File without changes
test CHANGED
@@ -135,3 +135,529 @@
135
135
  面倒な方法であってもできるだけフレームワークを使用せず勉強をすすめたいと思っております。
136
136
 
137
137
  ご回答いただけますと幸いです。
138
+
139
+
140
+
141
+
142
+
143
+ 追記:
144
+
145
+ ```モデル
146
+
147
+ @Entity
148
+
149
+ @Table(name = "profiles")
150
+
151
+ @NamedQueries({
152
+
153
+ @NamedQuery(name = "getProfile", query = "SELECT p FROM Pro AS p ORDER BY p.id DESC"),
154
+
155
+ @NamedQuery(name = "getProfileCount", query = "SELECT COUNT(p) FROM Pro AS p"),
156
+
157
+ })
158
+
159
+
160
+
161
+ public class Pro {
162
+
163
+ @Id
164
+
165
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
166
+
167
+ @Column(name = "id")
168
+
169
+ private Integer id;
170
+
171
+
172
+
173
+ @Column(name = "name", nullable = false)
174
+
175
+ private String name;
176
+
177
+
178
+
179
+ @Column(name = "favorite")
180
+
181
+ private String favorite;
182
+
183
+
184
+
185
+ public Integer getId() {
186
+
187
+ return id;
188
+
189
+ }
190
+
191
+
192
+
193
+ public void setId(Integer id) {
194
+
195
+ this.id = id;
196
+
197
+ }
198
+
199
+
200
+
201
+ public String getName() {
202
+
203
+ return name;
204
+
205
+ }
206
+
207
+
208
+
209
+ public void setName(String name) {
210
+
211
+ this.name = name;
212
+
213
+ }
214
+
215
+
216
+
217
+ public String getFavorite() {
218
+
219
+ return favorite;
220
+
221
+ }
222
+
223
+
224
+
225
+ public void setFavorite(String favorite) {
226
+
227
+ this.favorite = favorite;
228
+
229
+ }
230
+
231
+ }
232
+
233
+
234
+
235
+ ```
236
+
237
+ テーブル
238
+
239
+ ```profiles
240
+
241
+ +----------+---------------------------------+------+-----+---------+----------------+
242
+
243
+ | Field | Type | Null | Key | Default | Extra |
244
+
245
+ +----------+---------------------------------+------+-----+---------+----------------+
246
+
247
+ | id | int(11) | NO | PRI | NULL | auto_increment |
248
+
249
+ | favorite | set('りんご','バナナ','いちご') | YES | | NULL | |
250
+
251
+ | name | varchar(255) | NO | | NULL | |
252
+
253
+ +----------+---------------------------------+------+-----+---------+----------------+
254
+
255
+ +----+---------------+--------+
256
+
257
+ | id | favorite | name |
258
+
259
+ +----+---------------+--------+
260
+
261
+ | 1 | りんご | やまだ |
262
+
263
+ | 2 | りんご,バナナ | たなか |
264
+
265
+ | 3 | バナナ,いちご | おだ |
266
+
267
+ | 4 | いちご | なかい |
268
+
269
+ +----+---------------+--------+
270
+
271
+ ```
272
+
273
+ データ登録のJSP
274
+
275
+ ```new.JSP
276
+
277
+ <%@ page language="java" contentType="text/html; charset=UTF-8"
278
+
279
+ pageEncoding="UTF-8"%>
280
+
281
+ <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
282
+
283
+ <c:import url="../layout/app.jsp">
284
+
285
+ <c:param name="content">
286
+
287
+ <h2>プロフィール新規登録ページ</h2>
288
+
289
+
290
+
291
+ <form method="POST" action="<c:url value='/create' />">
292
+
293
+ <label for="name">名前</label>
294
+
295
+ <input type="text" name="name" value="${profile.name}" />
296
+
297
+ 好きな食べ物※複数可<br />
298
+
299
+ <label><input type="checkbox" name="favorite[]" value="りんご">りんご</label>&nbsp;&nbsp;
300
+
301
+ <label><input type="checkbox" name="favorite[]" value="バナナ">バナナ</label>&nbsp;&nbsp;
302
+
303
+ <label><input type="checkbox" name="favorite[]" value="いちご">いちご</label><br/>
304
+
305
+ <button type="submit">登録</button>
306
+
307
+ </form>
308
+
309
+
310
+
311
+ </c:param>
312
+
313
+ </c:import>
314
+
315
+ ```
316
+
317
+
318
+
319
+ データ登録のサーブレット
320
+
321
+ ```CreateServlet
322
+
323
+
324
+
325
+ /**
326
+
327
+ * Servlet implementation class CreateServlet
328
+
329
+ */
330
+
331
+ @WebServlet("/create")
332
+
333
+ public class CreateServlet extends HttpServlet {
334
+
335
+ private static final long serialVersionUID = 1L;
336
+
337
+
338
+
339
+ /**
340
+
341
+ * @see HttpServlet#HttpServlet()
342
+
343
+ */
344
+
345
+ public CreateServlet() {
346
+
347
+ super();
348
+
349
+ // TODO Auto-generated constructor stub
350
+
351
+ }
352
+
353
+
354
+
355
+ /**
356
+
357
+ * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
358
+
359
+ */
360
+
361
+ protected void doPost(HttpServletRequest request, HttpServletResponse response)
362
+
363
+ throws ServletException, IOException {
364
+
365
+ EntityManager em = DBUtil.createEntityManager();
366
+
367
+
368
+
369
+ Pro p = new Pro();
370
+
371
+ p.setName(request.getParameter("name"));
372
+
373
+ String[] favorite = request.getParameterValues("favorite");
374
+
375
+ String fvr_str = favorite[0];
376
+
377
+ for (int i = 1; i < favorite.length; i++) {
378
+
379
+ fvr_str += ("," + favorite[i]);
380
+
381
+ }
382
+
383
+ p.setFavorite(fvr_str);
384
+
385
+ List<String> errors = ProValidator.validate(p);
386
+
387
+ if (errors.size() > 0) {
388
+
389
+ em.close();
390
+
391
+
392
+
393
+ request.setAttribute("profile", p);
394
+
395
+ request.setAttribute("errors", errors);
396
+
397
+
398
+
399
+ RequestDispatcher rd = request.getRequestDispatcher("/WEB-INF/views/pro/new.jsp");
400
+
401
+ rd.forward(request, response);
402
+
403
+ } else {
404
+
405
+ em.getTransaction().begin();
406
+
407
+ em.persist(p);
408
+
409
+ em.getTransaction().commit();
410
+
411
+ em.close();
412
+
413
+ request.getSession().setAttribute("flush", "登録が完了しました。");
414
+
415
+
416
+
417
+ response.sendRedirect(request.getContextPath() + "/");
418
+
419
+
420
+
421
+ }
422
+
423
+
424
+
425
+ }
426
+
427
+ }
428
+
429
+
430
+
431
+ ```
432
+
433
+ 一覧表示と検索をするJSP
434
+
435
+ ```index.JSP
436
+
437
+ <%@ page language="java" contentType="text/html; charset=UTF-8"
438
+
439
+ pageEncoding="UTF-8"%>
440
+
441
+
442
+
443
+ <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
444
+
445
+
446
+
447
+
448
+
449
+ <c:import url="../layout/app.jsp">
450
+
451
+ <c:param name="content">
452
+
453
+ <c:if test="${flush != null}">
454
+
455
+ <div id="flush_success">
456
+
457
+ <c:out value="${flush}"></c:out>
458
+
459
+ </div>
460
+
461
+ </c:if>
462
+
463
+ <h2>プロフィール</h2>
464
+
465
+ <table id="profile_list">
466
+
467
+ <tbody>
468
+
469
+ <tr>
470
+
471
+
472
+
473
+ <th class="name">名前</th>
474
+
475
+ <th class="favorite">好きな食べ物</th>
476
+
477
+
478
+
479
+ </tr>
480
+
481
+ <c:forEach var="profile" items="${profiles}" varStatus="status">
482
+
483
+ <tr class="row${status.count % 2}">
484
+
485
+
486
+
487
+ <td class="name"><c:out value="${profile.name}" /></td>
488
+
489
+
490
+
491
+ <td class="favorite"><c:out value="${profile.favorite}" /></td>
492
+
493
+ </tr>
494
+
495
+
496
+
497
+ </c:forEach>
498
+
499
+ </tbody>
500
+
501
+ </table>
502
+
503
+
504
+
505
+ <div id="pagination">
506
+
507
+ (全${profiles_count}件)<br />
508
+
509
+ <c:forEach var="i" begin="1" end="${((profiles_count -1) /15 )+ 1}"
510
+
511
+ step="1">
512
+
513
+ <c:choose>
514
+
515
+ <c:when test="${i == page}">
516
+
517
+ <c:out value="${i}" />&nbsp;
518
+
519
+ </c:when>
520
+
521
+ <c:otherwise>
522
+
523
+ <a href="<c:url value='/profiles/index?page=${i}'/>"><c:out
524
+
525
+ value="${i}" /></a>&nbsp;
526
+
527
+ </c:otherwise>
528
+
529
+ </c:choose>
530
+
531
+ </c:forEach>
532
+
533
+ </div>
534
+
535
+
536
+
537
+ <p>
538
+
539
+ <a href="<c:url value='/new' />">プロフィール登録</a>
540
+
541
+ </p>
542
+
543
+ <h2>プロフィール検索</h2>
544
+
545
+
546
+
547
+ <form method="GET" action="<c:url value='/search' />">
548
+
549
+ 好きな食べ物で検索※複数可<br />
550
+
551
+ <label><input type="checkbox" name="favorite[]" value="りんご">りんご</label>&nbsp;&nbsp;
552
+
553
+ <label><input type="checkbox" name="favorite[]" value="バナナ">バナナ</label>&nbsp;&nbsp;
554
+
555
+ <label><input type="checkbox" name="favorite[]" value="いちご">いちご</label><br/>
556
+
557
+ <button type="submit">検索</button>
558
+
559
+ </form>
560
+
561
+ </c:param>
562
+
563
+ </c:import>
564
+
565
+ ```
566
+
567
+ 検索処理のサーブレット
568
+
569
+ ```SearchServlet
570
+
571
+ package controllers;
572
+
573
+
574
+
575
+ import java.io.IOException;
576
+
577
+
578
+
579
+ import javax.persistence.EntityManager;
580
+
581
+ import javax.servlet.ServletException;
582
+
583
+ import javax.servlet.annotation.WebServlet;
584
+
585
+ import javax.servlet.http.HttpServlet;
586
+
587
+ import javax.servlet.http.HttpServletRequest;
588
+
589
+ import javax.servlet.http.HttpServletResponse;
590
+
591
+
592
+
593
+ import utils.DBUtil;
594
+
595
+
596
+
597
+ /**
598
+
599
+ * Servlet implementation class Search
600
+
601
+ */
602
+
603
+ @WebServlet("/search")
604
+
605
+ public class Search extends HttpServlet {
606
+
607
+ private static final long serialVersionUID = 1L;
608
+
609
+
610
+
611
+ /**
612
+
613
+ * @see HttpServlet#HttpServlet()
614
+
615
+ */
616
+
617
+ public Search() {
618
+
619
+ super();
620
+
621
+ // TODO Auto-generated constructor stub
622
+
623
+ }
624
+
625
+
626
+
627
+ /**
628
+
629
+ * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
630
+
631
+ */
632
+
633
+ protected void doGet(HttpServletRequest request, HttpServletResponse response)
634
+
635
+ throws ServletException, IOException {
636
+
637
+ EntityManager em = DBUtil.createEntityManager();
638
+
639
+
640
+
641
+ String[] favorite = request.getParameterValues("favorite");
642
+
643
+ String fvr_str = favorite[0];
644
+
645
+ for (int i = 1; i < favorite.length; i++) {
646
+
647
+ fvr_str += ("," + favorite[i]);
648
+
649
+ }
650
+
651
+
652
+
653
+ }
654
+
655
+
656
+
657
+
658
+
659
+ }
660
+
661
+
662
+
663
+ ```

2

誤字の修正

2021/05/17 06:16

投稿

usazk
usazk

スコア0

test CHANGED
File without changes
test CHANGED
@@ -135,21 +135,3 @@
135
135
  面倒な方法であってもできるだけフレームワークを使用せず勉強をすすめたいと思っております。
136
136
 
137
137
  ご回答いただけますと幸いです。
138
-
139
-
140
-
141
- 返信:
142
-
143
- m.ts10806様
144
-
145
- 再度返信ありがとうございます。
146
-
147
- >違います。入力コントロールのname属性に[]とすることで配列として送信されるので作る必要ないです。
148
-
149
- 解釈が間違っていたようで申し訳ございません。
150
-
151
- 変更した方法も間違っていますでしょうか?
152
-
153
- もし差し支えなければ具体的にどのように書けばいいのか教えていただけますでしょうか。
154
-
155
- データ送信の時点でにつまずいてしまっていますが、実現したいことはその先にある、登録データからチェックボックスの情報に該当する内容を検索する方法なのでご教示いただけますと幸いです。

1

回答へのコメント

2021/05/16 13:30

投稿

usazk
usazk

スコア0

test CHANGED
File without changes
test CHANGED
@@ -96,7 +96,7 @@
96
96
 
97
97
      <label><input type="checkbox" name="favorite" value="バナナ">バナナ</label>&nbsp;&nbsp;
98
98
 
99
-    <label><input type="checkbox" name="favorite" value="バナナ">バナナ</label>&nbsp;&nbsp;
99
+    <label><input type="checkbox" name="favorite" value="いちご">いちご</label>&nbsp;&nbsp;
100
100
 
101
101
  ```
102
102
 
@@ -114,7 +114,7 @@
114
114
 
115
115
  String[] favorite = request.getParameterValues("favorite");
116
116
 
117
- String fvr_str = mood[0];
117
+ String fvr_str = favorite[0];
118
118
 
119
119
  for (int i = 1; i < favorite.length; i++) {
120
120
 
@@ -122,7 +122,7 @@
122
122
 
123
123
  }
124
124
 
125
- m.setFavorite(fvr_str);
125
+ p.setFavorite(fvr_str);
126
126
 
127
127
  ```
128
128
 
@@ -135,3 +135,21 @@
135
135
  面倒な方法であってもできるだけフレームワークを使用せず勉強をすすめたいと思っております。
136
136
 
137
137
  ご回答いただけますと幸いです。
138
+
139
+
140
+
141
+ 返信:
142
+
143
+ m.ts10806様
144
+
145
+ 再度返信ありがとうございます。
146
+
147
+ >違います。入力コントロールのname属性に[]とすることで配列として送信されるので作る必要ないです。
148
+
149
+ 解釈が間違っていたようで申し訳ございません。
150
+
151
+ 変更した方法も間違っていますでしょうか?
152
+
153
+ もし差し支えなければ具体的にどのように書けばいいのか教えていただけますでしょうか。
154
+
155
+ データ送信の時点でにつまずいてしまっていますが、実現したいことはその先にある、登録データからチェックボックスの情報に該当する内容を検索する方法なのでご教示いただけますと幸いです。