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

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

ただいまの
回答率

90.36%

  • Java

    15092questions

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

  • MySQL

    6552questions

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

  • Play Framework 2

    127questions

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

PlayframeworkでのCRUD

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 53

Nitta

score 47

お世話になってます。
今、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));
        }
    }
}
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • taketoma

    2019/02/12 12:39

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

    キャンセル

  • Nitta

    2019/02/12 13:30 編集

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

    キャンセル

  • taketoma

    2019/02/13 12:15

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

    キャンセル

  • Nitta

    2019/02/13 15: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プロパティに付けています。

    キャンセル

回答 1

checkベストアンサー

0

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/02/14 09:50

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

    キャンセル

同じタグがついた質問を見る

  • Java

    15092questions

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

  • MySQL

    6552questions

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

  • Play Framework 2

    127questions

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