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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Java

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

Play Framework 2

Play Framework 2はPlayのメジャーバージョンです。現代の web アプリケーション開発に必要なコンポーネント及び API を統合した生産性の高い Java と Scala の web アプリケーションフレームワークです。

Q&A

解決済

1回答

422閲覧

PlayframeworkでのCRUD

Nitta

総合スコア96

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Java

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

Play Framework 2

Play Framework 2はPlayのメジャーバージョンです。現代の web アプリケーション開発に必要なコンポーネント及び API を統合した生産性の高い Java と Scala の web アプリケーションフレームワークです。

0グッド

0クリップ

投稿2019/02/12 02:27

編集2019/02/12 02:30

お世話になってます。
今、PlayframeworkのCRUD処理において編集画面より
内容変更した場合、更新ができてません。
どのような箇所が悪いのか、お分かりの方居られましたら
ご教示下さい。

尚、update以外は一通り動きます。

●編集画面(edit.scala.html)

@(message: String, sampleform: Form[SampleData]) @main("編集画面"){ <h1></h1> <p>@message</p> @helper.form(action = routes.Application.update, args ='id -> "SampleData") { @(helper.inputText( field = sampleform("name"), args = '_label -> "名 前" ))  @(helper.inputText( field = sampleform("title"), args = '_label -> "表 題" ))  @(helper.inputText( field = sampleform("memo"), args = '_label -> "メ モ" )) <input type="submit" value="登 録"> } <p><a href="/">[HOME]</a><p> <hr> }

●controller

import play.api.db.*; //import java.io.*; import com.avaje.ebean.*; import org.apache.commons.lang3.StringUtils; import static play.data.Form.*; import play.db.ebean.*; import forms.*; import play.mvc.Http.MultipartFormData; import models.SampleData; import play.*; import play.mvc.*; import play.data.*; import views.html.*; public class Application extends Controller { public Result index(){ String title = "Sample Page"; String msg = "フォームを入力"; Form<SampleData> dataform = form(SampleData.class); List<SampleData> datas = SampleData.find.all(); return ok(mynum.render( title, msg, datas, dataform)); } public Result sendform(){ Form<SampleData> dataform = form(SampleData.class).bindFromRequest(); if(!dataform.hasErrors()){ dataform.get().save(); flash(); } return redirect("/"); } public Result edit(Long id){ SampleData updata = SampleData.find.byId(id); if(updata != null){ Form<SampleData> updata_F = form(SampleData.class).fill(updata); return ok(edit.render( "", updata_F)); }else{ return redirect("/"); } } public Result delete(Long id){ SampleData.find.ref(id).delete(); flash(); return redirect("/"); } //update処理 public Result update(){ Form<SampleData> dataform = form(SampleData.class).bindFromRequest(); if(!dataform.hasErrors()){ dataform.get().update(); flash(); return redirect("/"); }else{ return badRequest(edit.render("Error",dataform)); } } }

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

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

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

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

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

taketoma

2019/02/12 03:39

dataform.get().update()は、更新件数を返すと思うのですが何件になっていますか? 0件の場合は、dataform.get()で取得したSampleData内に画面上の値が入っているか確認してみてください。bindしているようで実際には何も入っていないとかないでしょうか?
Nitta

2019/02/12 04:43 編集

返信ありがとうございます。 dataform.get()で取得したSampleDataのFormクラス の画面上の値は正しく取得できています。
taketoma

2019/02/13 03:15

更新件数は1件になっていますか? SampleData.classはどのようになっているのですか? @Idのアノテーションはどのプロパティにつけていますか?
Nitta

2019/02/13 06:45

更新自体ができておりません。 SampleData.classは以下の通りです。 @Entity public class SampleData extends Model { @Id public Long id; @NotNull @Column(unique=true) public String name; @NotNull public String title; @NotNull public String memo; public static Finder<Long, SampleData> find = new Finder<Long, SampleData>(Long.class, SampleData.class); } @Idのアノテーションは、idプロパティに付けています。
guest

回答1

0

ベストアンサー

画面上のFormにキーとなるidがない為、
Submit後にControllerでバインドしてもidがセットされていないのだと思います。
更新しても、id=''という条件でSQLが実行されることが原因だと思います。

HtmlのForm内にhiddenで以下のようにidを配置すると更新できると思います。

scala

1<input type="hidden" value="@sampleform("id").value" name="@sampleform("id").id">

投稿2019/02/13 06:55

taketoma

総合スコア374

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

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

Nitta

2019/02/14 00:50

回答ありがとうございました。 見事に更新できました。 id取得してなかっただけ(´;ω;`) 苦しまされました! 今回はありがとうございました。 今後とも宜しくお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問