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

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

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

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

2回答

2951閲覧

入力データがnullになってしまう

iiinnn

総合スコア8

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2021/07/21 06:53

編集2021/07/29 03:05

前提・実現したいこと

Springbootを使い、更新機能を作りたいのですがなかなか思うようにいきません。
遷移はできているのですがデータがきちんと渡っていないため更新されず悩んでいます。
自分の力では進めることができないので皆様のお力添えをいただきたいです。

発生している問題

更新されないまま遷移する。

SQL

/** 情報更新 **/ @Update("UPDATE TBL_REGIST SET regist_name=#{uName}, regist_representative=#{uRepre}, regist_tel=#{uTel}, regist_fax=#{uFax}, regist_postalcode=#{uPostal}, regist_address1=#{uA1}, WHERE regist_id = #{uId}") void updateSQL01(@Param("uId") String registId, @Param("uName") String uName, @Param("uRepre") String uRepre, @Param("uTel") String uTel, @Param("uFax") String uFax, @Param("uPostal") String uPostal, @Param("uA1") String uA1);

RegistForm.java

package jp.co.lain.information; import java.sql.Timestamp; import lombok.Data; @Data public class RegistForm { private String regist_id; private String regist_name; private String regist_tel; private String regist_fax; private String regist_representative; private String regist_postalcode; private String regist_address1; private Timestamp create_date; }

Controller

@GetMapping("/viewUpdate") public String viewUpdate(Model model, RegistForm registId) { String result = new String(); result = service.updRegistList(registId); model.addAttribute("registForm", registId); return "information/update"; } @PostMapping("/viewUpdateComplete") public String viewUpdateComplete(Model model, String list) { return "information/UpdateComplete"; } }

Service

public String updRegistList(RegistForm registForm) { String result = new String(); sqlMapper.updateSQL01( registForm.getRegist_id(), registForm.getRegist_name(), registForm.getRegist_tel(), registForm.getRegist_fax(), registForm.getRegist_representative(), registForm.getRegist_postalcode(), registForm.getRegist_address1(), registForm.getRegist_address2(), registForm.getRegist_address3(), registForm.getRegist_address4()); return result; } }

update.html

<!doctype html> <html xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>更新画面</title> <script src=“https://yubinbango.github.io/yubinbango/yubinbango.js” charset=“UTF-8”></script> </head> <body> <div style="text-align: center"> <h2 style="text-align: center">情報更新</h2> <hr style="height: 3; background =color: #0000FF" /> <br> 更新する情報を入力してください。 <form th:action="@{/viewUpdatetComplete}" th:object="${registForm}" method="POST" > <table style="margin: 0 auto"> <tr> <td><input type=text size="30" th:field="*{regist_id}" pattern="\d{4}" title="半角数字4桁でご入力ください。" placeholder="例 : 0001" required></input></td> </tr> <tr> <td style="width: 60">企業名</td> <td><input type=text size="30" th:field="*{regist_name}" placeholder="例 : 株式会社A" required></input></td> </tr> <tr> <td style="width: 70">電話番号</td> <td><input type=tel size="30" th:field="*{regist_tel}" pattern="\d{2,4}-\d{3,4}-\d{3,4}" title="半角数字11桁、ハイフンを付けてご入力ください。" placeholder="例 : 090-1234-5678"></input></td> </tr> <tr> <td style="width: 70">FAX</td> <td><input type=tel size="30" th:field="*{regist_fax}" pattern="\d{2,4}-\d{3,4}-\d{3,4}" title="半角数字11桁、ハイフンを付けてご入力ください。" placeholder="例 : 080-1234-5678"></input></td> </tr> <tr> <td style="width: 70">代表者</td> <td><input type=text size="30" th:field="*{regist_representative}" pattern="[^\x20-\x7E]*" title="全角でご入力ください。" placeholder="例 : 山田太郎" required></input></td> </tr> <tr> <td style="width: 70">郵便番号</td> <td><input type=text size="30" th:field="*{regist_postalcode}" pattern="\d{3}-\d{4}" title="3桁の数字、ハイフン、4桁の数字の順でご入力ください。" placeholder="例 : 123-4567" onKeyUp="AjaxZip3.zip2addr(this,'','regist_address1','regist_address1');"></input></td> </tr> <tr> <td style="width: 70">住所1</td> <td><input type=text size="30" th:field="*{regist_address1}" placeholder="例 : 埼玉県さいたま市大宮区1-1-1"></input></td> </tr> <tr> <td colspan=2 style="text-align: center"> <input type="submit" value="更新"></td> </tr> </table> <br><br> <a th:href="@{/viewCompanyInformationList}">一覧へ戻る</a> </form> </div> </body> </html>

updateComplete.html

<!doctype html> <html xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>更新完了画面</title> </head> <body> <div style="text-align: center"> <h2 style="text-align: center">更新完了</h2> <br> 更新が完了しました。 情報一覧へ戻るを押してご確認ください。 <p><a th:href="@{/viewCompanyInformationList}">一覧へ戻る</a></p> </div> </body> </html>

build.grable

plugins { id 'org.springframework.boot' version '2.1.4.RELEASE' id 'java' } apply plugin: 'io.spring.dependency-management' group = 'com.example' version = '0.0.1-SNAPSHOT' sourceCompatibility = '1.8' configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.0.1' compileOnly 'org.projectlombok:lombok' runtimeOnly 'org.springframework.boot:spring-boot-devtools' runtimeOnly 'com.h2database:h2' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' }

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

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

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

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

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

m.ts10806

2021/07/21 07:01

本件とは大きく関係あるわけではないですが「挿入」はInsertです。 一字違うと全く別のものとなります。プログラミングにおいては致命的にもなるので気にしてほしいところです。
m.ts10806

2021/07/21 07:01

あと、またSreviceって書いてますね。
kiino

2021/07/26 14:19

以下の内容を説明文に追記お願いしてもよいでしょうか - pom.xml または、build.gradle の内容を教えてください。 何のライブラリやバージョンを使っているのかが把握したいです。 - 使っているDBライブラリは何かを記載してほしいです。見た感じ MyBatis だと思うのですが、mapper.xml の設定などを教えてください。 - Service class ですが、省略されているようにみえましたができれば省略せずに全体を記載してほしいです。 特に sqlMapper が何のクラスのインスタンスかわかるように記載してほしいです。 - 可能であればRegistForm class の内容も教えてください
iiinnn

2021/07/27 04:57

ご回答ありがとうございます。 修正致しました。 使っているDBライブラリはMyBatisです。 mapper.xmlがどこにあるのかわからなかったです。。 今わかっている、 build.gradle、Service class、RegistForm classは記載致しました。
kiino

2021/07/27 17:19

修正ありがとうございます。 > 特に sqlMapper が何のクラスのインスタンスかわかるように記載してほしいです。 Service 更新いただいたのですが、sqlMapper インスタンスがどこのクラス由来かわからないままになっていますね。 たぶん SQL とかかれたメソッドのあるファイルで mapper を定義しているのだと思って理解しました。 認識違いでしたら教えてください。 > mapper.xmlがどこにあるのかわからなかったです。。 mapper interface を設定すれば、xml での定義は不要みたいなので、質問者様の環境にはなかったようです。 こちらは私の認識ちがいでしたので、忘れてください。 また、以下の点は修正した方がよさそうです - html 上で、更新をするときに「action="@{/viewInsurtComplete1}」とありますが、こちらの繊維先がないようです。 - html 上で 「<script src」 の部分が github..io とドットが2つあって読み込めてなさそうです - Spring のバージョンがだいぶ前のものを使っているようですが、こちらは参考にした資料のバージョンをそのまま使った感じでしょうか。 可能であれば参考にした資料など教えてもらえますでしょうか
kiino

2021/07/27 17:29

誤解を招きそうだったので、補足させてください > Spring のバージョンがだいぶ前のものを使っている ここは直してほしいとかではなく、背景を知りたいというのが主旨になります。 このアプリケーションで何をしたかったのかを把握したいのですが、参考資料があるのであれば、 そちらも確認させていただこうと思った次第です
iiinnn

2021/07/28 07:32

> Service 更新いただいたのですが、sqlMapper インスタンスがどこのクラス由来かわからないままになっていますね。 > たぶん SQL とかかれたメソッドのあるファイルで mapper を定義しているのだと思って理解しました。 > 認識違いでしたら教えてください。 インスタンスの意味が上手く取り入れられないのですが mybatisのファイル内にsqlmapperが格納されています。 > Spring のバージョンがだいぶ前のものを使っているようですが、こちらは参考にした資料のバージョンをそのまま使った感じでしょうか。 かなり前のバージョンなのですね、知りませんでした。 このSpringでやってくださいと言われたままやっていたので参考資料がどこにあるかも 把握できていないです。お力になれず申し訳ありません。
iiinnn

2021/07/28 07:44

> - html 上で、更新をするときに「action="@{/viewInsurtComplete1}」とありますが、こちらの繊維先がないようです。 > - html 上で 「<script src」 の部分が github..io とドットが2つあって読み込めてなさそうです ご指摘ありがとうございます。訂正いたしました。
kiino

2021/07/28 13:04

何度も修正ありがとうございます。 またしても五月雨ですいません、 この質問にすでに回答ついてるのでやりとり不要かもしれませんが、 以下の件についておしてください(最初に聞けばよかった内容なのですが) registId を表示したい insurt.html はどんな html かおしえてください
iiinnn

2021/07/29 00:32

insurt.html(=update.html)は更新内容を入力してほしい画面です。 insurtからupdateに名前を変えたので混乱させてしまったら申し訳ないです。
guest

回答2

0

ベストアンサー

以下の修正をすれば、DBにデータ登録は可能になりそうです。

  • @PostMapping("viewUpdatetComplete") をつけたメソッドを Controller に実装する
  • そのメソッド内に service.updRegistList() を呼ぶ

Java

1 @PostMapping("/viewUpdatetComplete") 2 public String viewUpdateComplete(Model model, RegistForm resistorForm) { 3 // 更新処理 4 String result = service.updRegistList(resistorForm); 5 return "companyInformation/UpdateComplete"; 6 }

update.html の内容は RegistForm のデータを渡せるようになっているので、
その「POSTリクエストを受けて」、「RegistForm のデータを解釈」して「DB更新処理を呼び出す」ことをController 側ですれば期待動作になると思います。
質問者様の Controller class だと上のどれかが組み合わせが悪く、正しく動かせてないと思われます。

GetでもリクエストRegistForm の情報を渡せなくはないのですが、
一旦忘れていただいて、update.html はそのままで、Controller クラスの方を修正されて、
動くイメージを持っていただいた方がよいかと思いました。

また、

registIdを引っ張て来てinsurt.htmlに表示したい

とあるのですが、この html はどのような形式か聞くのを失念しておりました。
registId がRegistForm 自体のことなのか、RegistForm の regist_id をことを指すのか、
「引っ張ってきて」とありますが、リクエストで受け取った値を使うのか、DBからSELECTで参照するのかで、
ちょっと変わってくるのですが、
どちらにせよ、モデルのビューに insurt.html を設定して、attribute の方に変数を渡せば実現できると思います。

受け取った値を返す場合

Java

1 @PostMapping("/xxxx") 2 public String doSomething(Model model, RegistForm resistorForm) { 3 // 何か処理 4 // ... 5 model.addAttribute("result", resistorForm); 6 return "insurt"; 7 } 8

DB から取得する例

Java

1 @PostMapping("/yyyy") 2 public String doSomething2(Model model, String registId) { 3 // 何か処理 4 // ... 5 RegistForm ret = service.getRegistFromById(registId); 6 // thymeleaf の変数に渡すために、model の attribute に設定する 7 model.addAttribute("registerForm", resistorForm); 8 return "insurt"; 9 } 10

投稿2021/07/28 13:25

kiino

総合スコア557

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

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

iiinnn

2021/07/29 02:48

上記の通り訂正したところ機能がうまく動くようになりました。 ご丁寧にありがとうございました。
guest

0

これって、
①update.htmlの更新ボタンをクリックしたときに
②ControllerのviewUpdateを実行して
③ServiceのupdRegistListを実行したい

というのが実施したいことでしょうか?

であれば
①でボタンをクリックしたときはformタグのactionに指定したviewUpdatetCompleteに対してPOSTリクエストが呼ばれると思います。
しかし、ControllerのviewUpdateはGetMappingかつパスが「"/CIMS/viewUpdate"」で定義しているため
いくら待っても呼ばれないかと思います。(※Getで待っているところにいくらPOSTしても意味がない状態になっています。)

そのため以下を行えばとりあえずメソッドは呼ばれるかと思います。
・GetMappingからPostMappingへ修正
・formタグのation属性の修正(あるいはパスの修正)

※各IDEにはデバッグ機能があるので、デバッグをしてどこまで動いているかなど1つ1つ確実に確認していかれることを強くお勧めいたします

投稿2021/07/28 07:52

momotuwo

総合スコア155

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

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

iiinnn

2021/07/28 08:12

> ・GetMappingからPostMappingへ修正 > ・formタグのation属性の修正(あるいはパスの修正) ご指摘ありがとうございます。 viewUpdatetCompleteに対してPOSTリクエストはしてあるので 「/CIMS/viewUpdate」をGetMapping→PostMappingに、 「update.html」をmethod="POST"→method="GET"に変える という意味でしょうか? 修正してみたところ405エラーが出てしまいます。。 変えてみたのですが
momotuwo

2021/07/28 08:16

th:action="@{/viewUpdatetComplete}" を th:action="@{/CIMS/viewUpdatetComplete}" このように修正はされましたでしょうか? あるいは、Controllerのクラス定義についている@RequestMappingにパスを指定していると それもパスに加わるのでまた変わってきます。
iiinnn

2021/07/28 08:38

> th:action="@{/viewUpdatetComplete}"を > th:action="@{/CIMS/viewUpdatetComplete}" > このように修正はされましたでしょうか? 修正しております。。 > Controllerのクラス定義についている@RequestMappingにパスを指定していると > それもパスに加わるのでまた変わってきます。 してみたのですが405エラーのままです。 1つ怪しいなと思うところが 「update.html」の更新ボタンを押したときに 画面表示の☆26☆27だけでいいのに ☆23: ☆24getRegist_id:null// ☆24getRegist_name:null// ☆24getRegist_tel:null//・・・ とコンソールにnullが出てきてしまっています。
momotuwo

2021/07/28 08:52

> 「update.html」の更新ボタンを押したときに > 画面表示の☆26☆27だけでいいのに viewUpdateからservice.updRegistListを呼び出しているので 当然の結果ではないでしょうか? そもそもですが、viewUpdateって何をしたいメソッドですか? 更新?表示だけ?そのあたりをきちんと整理することをまずはお勧めします
iiinnn

2021/07/28 08:57

更新画面を表示、入力し 更新ボタンを押して更新したい画面です。 入力してないのに更新画面に行くときに ☆23: ☆24getRegist_id:null// ☆24getRegist_name:null// ☆24getRegist_tel:null//・・・ こう出てしまうのでおかしいと思いました。
momotuwo

2021/07/28 09:18

> 更新画面に行くとき とは何をしたときのことを言っているのでしょうか? 可能な限り具体的にだれが見てもわかるように記載いただきますようお願いいたします。
iiinnn

2021/07/29 00:35

説明不足で申し訳ないです。 前画面から更新画面とリンク付けたボタンを押すことです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問