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

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

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

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

Java

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

Q&A

解決済

1回答

1988閲覧

formクラスからImplementsに値を渡す方法

jaxxaxa

総合スコア10

JSP

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

Java

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

0グッド

0クリップ

投稿2020/05/07 01:31

編集2020/05/07 05:55

いつもお世話になっております。

画面側で各入力フォームにコメントを入力して、公開開始日を過ぎたら表示するようなプログラムを作成しています。
jspで入力フォームを作り上げることはできましたが
実装クラスでフォーム内の値が取得できずnullとなってしまします。

デバッグを行って入力したformの値が入っていないことは確認できたのですが、具体的にどこがおかしいのか
原因を追究できず困っている状況ですのでご教授いただければと思います。

実行環境は
・Java8
・Apache Tomcat8
です。

よろしくお願いいたします。

やってみたこと。

jsp側の記述
<form:form modelAttribute="commentReportForm" action="commentReportRegister" method="post">
に変更してみました。
→formの値が取得できないのでエラーを吐かれます

Controller

1 @RequestMapping(value = "commentReportRegister", method = RequestMethod.POST, params = "select") 2 public String register(@ModelAttribute @Validated CommentReportForm form, BindingResult result, Principal principal, 3 Model model, HttpServletRequest request, @RequestParam(name = "select") String userId) 4 throws ComponentException { 5 6 try { 7 // PrincipalからユーザNo.取得 8 Authentication authentication = (Authentication) principal; 9 ReservationUserDetails reservationUserDetails = (ReservationUserDetails) authentication.getPrincipal(); 10 LoginInfoBean loginInfoBean = reservationUserDetails.getLoginInfoBean(); 11 12 if (result.hasErrors()) { 13 return this.init(model, request, userId); 14 } 15 16 this.commentReportInterface.registerCommentReport(form, loginInfoBean.getUserNo()); 17 18 return "redirect:/manager/commentReportList"; 19 20 } catch (Exception e) { 21 e.printStackTrace(); 22 throw new ComponentException("コメント登録処理例外発生.", e); 23 } 24 }

form

1public class CommentReportForm { 2 //ユーザーNo(NotNull) 3 private String userNo; 4 //コメント年月日(NotNull) 5 private LocalDate commentDate; 6 //コメント1 7 private String comment1Text; 8 //コメント2 9 private String comment2Text; 10 //コメント3 11 private String comment3Text; 12 //公開開始日(NotNull) 13 private Timestamp releaseStartTimestamp; 14 15 /** 16 * @return userNo 17 */ 18 public String getUserNo() { 19 return userNo; 20 } 21 22 /** 23 * @param userNo 24 * セットする userNo 25 */ 26 public void setUserNo(String userNo) { 27 this.userNo = userNo; 28 } 29 30 /** 31 * @return commentDate 32 */ 33 public LocalDate getCommentDate() { 34 return commentDate; 35 } 36 37 /** 38 * @param commentDate2 39 * セットする commentDate 40 */ 41 public void setCommentDate(LocalDate commentDate2) { 42 this.commentDate = commentDate2; 43 } 44 45 /** 46 * @return comment1Text 47 */ 48 public String getComment1Text() { 49 return comment1Text; 50 } 51 52 /** 53 * @param comment1Text 54 * セットする comment1Text 55 */ 56 public void setComment1Text(String comment1Text) { 57 this.comment1Text = comment1Text; 58 } 59 60 /** 61 * @return comment2Text 62 */ 63 public String getComment2Text() { 64 return comment2Text; 65 } 66 67 /** 68 * @param comment2Text 69 * セットする comment2Text 70 */ 71 public void setComment2Text(String comment2Text) { 72 this.comment2Text = comment2Text; 73 } 74 75 /** 76 * @return comment3Text 77 */ 78 public String getComment3Text() { 79 return comment3Text; 80 } 81 82 /** 83 * @param comment3Text 84 * セットする comment3Text 85 */ 86 public void setComment3Text(String comment3Text) { 87 this.comment3Text = comment3Text; 88 } 89 90 /** 91 * @return releaseStartTimestamp 92 */ 93 public Timestamp getReleaseStartTimestamp() { 94 return releaseStartTimestamp; 95 } 96 97 /** 98 * @param releaseStartTimestamp 99 * セットする releaseStartTimestamp 100 */ 101 public void setReleaseStartTimestamp(Timestamp releaseStartTimestamp) { 102 this.releaseStartTimestamp = releaseStartTimestamp; 103 } 104 105} 106

Implements

1 @Override 2 public int registerCommentReport(CommentReportForm form, Integer userNo) throws ComponentException { 3 CommentReportDto dto = new CommentReportDto(); 4 dto.setUserNo(userNo); 5 dto.setCommentDate(ServerParam.getLocalDate()); 6 dto.setComment1Text(form.getComment1Text()); 7 dto.setComment2Text(form.getComment2Text()); 8 dto.setComment3Text(form.getComment3Text()); 9 dto.setReleaseStartTimestamp(form.getReleaseStartTimestamp()); 10 dto.setRegistrantNo(userNo); 11 dto.setRegisterTimestamp(ServerParam.getTimestamp()); 12 return this.commentReportDao.registerCommentReport(dto); 13 } 14

Dao

1 public int registerCommentReport(CommentReportDto dto) throws ComponentException { 2 3 StringBuilder sql = new StringBuilder(); 4 sql.append(" insert into trn_comment_report ("); 5 sql.append(" user_no"); //ユーザーNo 6 sql.append(" ,comment_date"); // コメント年月日 7 sql.append(" ,comment1_text"); // コメント1 8 sql.append(" ,comment2_text"); // コメント2 9 sql.append(" ,comment3_text"); // コメント3 10 sql.append(" ,release_start_timestamp");//公開開始日時 11 sql.append(" ,registrant_no"); //登録者No. 12 sql.append(" ,register_timestamp"); //登録日時 13 sql.append(" )values("); 14 sql.append(" ?, ?, ?, ?, ?, ?, ?, ?"); 15 sql.append(" );"); 16 17 try { 18 return this.jdbcTemplate.update(sql.toString(), dto.getUserNo(),dto.getCommentDate(), dto.getComment1Text(), 19 dto.getReleaseStartTimestamp(),dto.getComment2Text(), dto.getComment3Text(), dto.getRegistrantNo(), dto.getRegisterTimestamp()); 20 21 } catch (Exception e) { 22 e.printStackTrace(); 23 throw new ComponentException("コメント登録処理失敗.", e); 24 } 25 }

ServerParam

1public final class ServerParam { 2 3 /** 4 * @return サーバ内年月日 5 */ 6 public static LocalDate getLocalDate() { 7 return LocalDate.now(); 8 } 9 10 /** 11 * @return サーバ内時間 12 */ 13 public static LocalTime getLocalTime() { 14 return LocalTime.now(); 15 } 16 17 /** 18 * @return サーバ内年月日時間 19 */ 20 public static LocalDateTime getLocalDateTime() { 21 return LocalDateTime.now(); 22 } 23 24 /** 25 * @return サーバ内年月日時間 26 */ 27 public static Date getDate() { 28 return Date.valueOf(LocalDate.now()); 29 } 30 31 /** 32 * @return サーバ内年月日 33 */ 34 public static Time getTime() { 35 return Time.valueOf(LocalTime.now()); 36 } 37 38 /** 39 * @return サーバ内時間 40 */ 41 public static Timestamp getTimestamp() { 42 return Timestamp.valueOf(LocalDateTime.now()); 43 } 44} 45

jsp

1<form:form modelAttribute="commentReportForm"> 2 <div class="container-fluid"> 3 <div class="row"> 4 <div class="col-12"> 5 <table id="commentList" class="table table-bordered"> 6 <thead class="thead-job-color"> 7 <tr> 8 <th>コメント</th> 9 </tr> 10 </thead> 11 <tbody> 12 <tr> 13 <td> 14 <p> 15 <label for="comment1" class="label-control">comment1</label><br> 16 <textarea id="comment1" name="comment1" rows="6" cols="80"></textarea> 17 </p> 18 19 <p> 20 <label for="comment2">comment2</label><br> 21 <textarea id="comment2" name="comment2" rows="6" cols="80"></textarea> 22 </p> 23 24 <p> 25 <label for="comment3">comment3</label><br> 26 <textarea id="comment3" name="comment3" rows="6" cols="80"></textarea> 27 </p> 28 </td> 29 </tr> 30 </tbody> 31 </table> 32 <table class="table table-bordered"> 33 <thead class="thead-job-color"> 34 <tr> 35 <th>公開開始日時</th> 36 </tr> 37 </thead> 38 <tbody> 39 <tr> 40 <td> 41 <p> 42 <input id="releaseStartTimestamp" name="releaseTimestamp" 43 class="form-control" type="datetime-local" 44 required="required" 45 value="<%=localDateTime.format(dateTimeFormatter)%>" /> 46 47 </p> 48 </td> 49 </tr> 50 </tbody> 51 </table> 52 </div> 53 </div> 54 </div> 55 <p class="text-center"> 56 <button onClick="javascript:forbiddenDoubleClick(this)" 57 class="button btn btn-success" type="submit">登録</button> 58 </p> 59</form:form>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

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

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

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

guest

回答1

0

ベストアンサー

jsp

1<textarea id="comment1" name="comment1" rows="6" cols="80"></textarea>

name="comment1"としているのであれば、CommentReportFormクラスも

java

1 //コメント1 2 private String comment1; 3 : 4 : 5 /** 6 * @return comment1 7 */ 8 public String getComment1() { 9 return comment1; 10 } 11 12 /** 13 * @param comment1Text 14 * セットする comment1Text 15 */ 16 public void setComment1(String comment1Text) { 17 this.comment1 = comment1Text; 18 }

等のようにプロパティ名も同じにしてやらないと値が取れないと思います。

投稿2020/05/07 03:14

KoichiSugiyama

総合スコア3041

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

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

jaxxaxa

2020/05/07 04:53

プロパティ名を同じにしてあげる必要があったのですね。 コメント入力欄と公開開始日のnameがformクラスと同じになってなかったので値が取れなかったのが確認取れまして、変更したら値の取得に成功することができました。 公開開始日のところは型が合わないとかでSQL文のエラーを吐かれてしまったので、再度考えて不明点があったらまた質問させていただきます。 ありがとうございます。
KoichiSugiyama

2020/05/07 04:59

公開開始日(releaseTimestamp)については、一旦文字列として取得して、TimeStampに変換してやるしかないのではないかと思います。
jaxxaxa

2020/05/07 05:13

SQL文に関してはDaoクラス内でStringBuilderを用いて、jdbcTemplate.update()を使用しています。TimeStampに変換するというのはto_timestamp(text, text)を使用するものだと認識しているのですが、変換のタイミングはどこで行うべきなのかが現状の不明点となります。
KoichiSugiyama

2020/05/07 05:44 編集

Spring(ですよね?)はあまり触っていないので外しているかもしれませんが、CommentReportDto クラスのreleaseStartTimestampプロパティをTimeStamp型にしておけばDBのtimestamp型に合わせやすいと思います。つまりCommentReportDto .setReleaseStartTimestamp()の引数として、文字列からTimeStampに変換した公開開始日を渡すことになるのではないでしょうか。
jaxxaxa

2020/05/07 06:02

追記忘れてました。Spring使用しています。 DtoクラスのreleaseStartTimestampもTimeStamp型にしてエラーが出てしまっている状況になります。 再度デバッグで精査したのですが、releaseStartTimestampに値が入っていなかったようです。ただ、ご教授いただいたようにプロパティ名をjspとformを同一にしても値を取得できていないのでそこが原因なのでしょうか。。
KoichiSugiyama

2020/05/07 08:21 編集

CommentReportFormクラスのreleaseStartTimestampプロパティを<input>要素から取得するのに、直接TimeStamp型にはできないと思います。一旦、String型の引数からセッター内部でTimeStamp型に変換するか、プロパティをString型にしてCommentReportDtoクラスに渡す際にTimeStamp型にすればよいのではないでしょうか(その場合、jspで公開開始日に設定している個所にも注意してください)。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問