2016-04-29 13 views
3

私はPlay framework -Computer database with Javaの例をカスタマイズしようとしています。しかし、私は "編集"ページ上の送信ボタンを動作させる(注釈を付ける)ようには思えません。ここでは、フォームの:再生フレームワーク:送信ボタンが機能しないようです。

@(id: Long, computerForm: Form[Provider]) 

@import helper._ 

@implicitFieldConstructor = @{ FieldConstructor(twitterBootstrapInput.render) } 

@main { 

    <h1>Provide fb*emphasized text*</h1> 

    @form(routes.Application.update(id)) { 

     <fieldset> 

      @inputText(computerForm("fb"), '_label -> "Feedback", '_help -> "") 
      @inputText(computerForm("rating"), '_label -> "Rating", '_help -> "") 
     </fieldset> 
     <div class="actions"> 
      <!-- This button does nothing!--> 
      <input type="submit" value="Submit fb!" class="btn primary"> or 
      <a href="@routes.Application.list()" class="btn">Cancel</a> 
     </div> 

    }  
} 

そして、ここApplication.javaからupdate方法です:

public static Result update(Long id) { 
    Form<Provider> computerForm = form(Provider.class).bindFromRequest(); 
    if(computerForm.hasErrors()) { 
     return badRequest(editForm.render(id, computerForm)); 
    } 
    computerForm.get().update(id); 
    flash("success", "Provider " + computerForm.get().fullname + " has been updated"); 
    return GO_HOME; 
} 

私が間違っているのは何?

EDIT-詳細。

モデル:Provider.java

/** 
* Company entity managed by Ebean 
*/ 
@Entity 
public class Provider extends Model { 

private static final long serialVersionUID = 1L; 

@Id 
@GeneratedValue(strategy = GenerationType.IDENTITY) 
public Long id; 

@Constraints.Required 
public String fullname; 

public String tech; 

public String experience; 

public String email; 

public String feedback; 
public int rating; 
/** 
* Generic query helper for entity Provider with id Long 
*/ 
public static Model.Finder<Long, Provider> find = new Model.Finder<Long, Provider>(Long.class, Provider.class); 

public static Map<String, String> options() { 
    LinkedHashMap<String, String> options = new LinkedHashMap<String, String>(); 
    for (Provider c : Provider.find.orderBy("tech").findList()) { 
     options.put(c.id.toString(), c.fullname); 
    } 
    return options; 
} 

public static Page<Provider> page(int page, int pageSize, String sortBy, String order, String filter) { 
    return find.where().ilike(sortBy, "%" + filter + "%").findPagingList(pageSize).setFetchAhead(false) 
      .getPage(page); 
} 

}

質問2:私はボタンをクリックしたときに何が起こる:目に見える何もありません。しかし、私が本当に近く見ると、同じページ(更新ページ)にリダイレクトされているようです。しかしコントローラに基づいて、私はそれがGO_HOME変数に基づいてホームページに戻ることを期待していました。

Application.java

package controllers; 

import play.mvc.*; 
import play.data.*; 
import static play.data.Form.*; 

import views.html.*; 

import models.*; 

/** 
* Manage a database of Providers 
*/ 
public class Application extends Controller { 

    /** 
    * This result directly redirect to application home. 
    */ 
    public static Result GO_HOME = redirect(
     routes.Application.list(0, "fullname", "asc", "") 
    ); 

    /** 
    * Handle default path requests, redirect to computers list 
    */ 
    public static Result index() { 
     return GO_HOME; 
    } 

    /** 
    * Display the paginated list of Providers. 
    * 
    * @param page Current page number (starts from 0) 
    * @param sortBy Column to be sorted 
    * @param order Sort order (either asc or desc) 
    * @param filter Filter applied on computer names 
    */ 
    public static Result list(int page, String sortBy, String order, String filter) { 
     return ok(
      list.render( 
       Provider.page(page, 10, sortBy, order, filter), 
       sortBy, order, filter 
      ) 
     ); 
    } 

    /** 
    * Display the 'edit form' of a existing Computer. 
    * 
    * @param id Id of the computer to edit 
    * // TODO : Fix wiring and button actions 
    */ 
    public static Result edit(Long id) { 
     Form<Provider> computerForm = form(Provider.class).fill(
      Provider.find.byId(id) 
     ); 
     return ok(
      editForm.render(id, computerForm) 
     ); 
    } 

    /** 
    * Handle the 'edit form' submission 
    * 
    * @param id Id of the computer to edit 
    */ 
    public static Result update(Long id) { 
     Form<Provider> computerForm = form(Provider.class).bindFromRequest(); 
     if(computerForm.hasErrors()) { 
      return badRequest(editForm.render(id, computerForm)); 
     } 
     computerForm.get().update(id); 
     flash("success", "Computer " + computerForm.get().fullname + " has been updated"); 
     return GO_HOME; 
    } 

    /** 
    * Display the 'new Provider form'. 
    */ 
    public static Result create() { 
     Form<Provider> computerForm = form(Provider.class); 
     return ok(
      createForm.render(computerForm) 
     ); 
    } 

    /** 
    * Handle the 'new Provider form' submission 
    */ 
    public static Result save() { 
     Form<Provider> computerForm = form(Provider.class).bindFromRequest(); 
     if(computerForm.hasErrors()) { 
      return badRequest(createForm.render(computerForm)); 
     } 
     computerForm.get().save(); 
     flash("success", "Provider " + computerForm.get().fullname + " has been created"); 
     return GO_HOME; 
    } 

} 
+0

このコードは機能しているようですが、明らかに間違っているわけではありません。あなたの投稿をフォームモデルで更新できますか?あなたのコードは私がリンクで見つけたコードと少し違って見えます。 – tgk

+0

「働いていない」とはどういう意味ですか?エラーが発生しますか?何も起こりません?新しいデータは保持されませんか?実際に起こっていることと起こっていることについて、さらに詳しい情報を追加するには、投稿を編集してください。 – marcospereira

+0

@ marcospereira、@ user3384225 ..新しいデータを永続化してリストページにリダイレクトするのではなく、同じページにリダイレクトするようです。私はコントローラとモデルを追加して、より良い画像を提供しました。ありがとう! – NewbUser

答えて

1

私を許して、私はスカラ座で最もよく知っているが、私の疑惑は、あなたが提出し、その同じページを返すにフォームの検証に失敗していることである。

if(computerForm.hasErrors()) { 
    return badRequest(createForm.render(computerForm)); 
} 

Providerクラスでは、defining a constraintfullname

@Constraints.Required 
public String fullname; 

あなたのフォームにfullnameは含まれていません。モデルから制約を削除するか、フィールドをフォームに追加できますか?

また、ビューにはフォームフィールドfbが参照されていますが、プロバイダモデルにはその値はありません。 feedbackである必要がありますか?

関連する問題