2

フォーム付きのテンプレートがあります。私はscala Helperを使用してデータフォームを処理し、Modelオブジェクトとして保存しています。私の例でわかるように、helper.selectフィールドはManyToMany ではなくManytoOneで機能します。ここで、フォームで複数のカテゴリを選択してモデルを保存できるようにしたいと考えています。フォームヘルパーでそれを行うことはできますか、それとも従来の方法で行う必要がありますか。

景色:

(..)
@helper.form(action = routes.Admin.newItem(), 'id -> "item_form", 'method -> "POST", 'enctype -> "multipart/form-data"){
        <fieldset>
            @helper.inputText(
            itemForm("title"),
            '_label -> "Titre"  )

            @helper.inputText(
            itemForm("price"),
            '_label -> "Prix"   )

            @helper.select(
            itemForm("category.id"), 
            helper.options(Category.list),
            'id -> "category",
            '_label -> "Categorie")

            @helper.textarea(
            itemForm("content"),
            '_label -> "Description")

            @helper.inputText(
            itemForm("url"),
            '_label -> "URL"    )

            @helper.inputText(
            itemForm("picture"),
            '_label -> "Picture URL"    )

             <input type="submit" value="Ajouter">

        </fieldset>
        }

管理コントローラ

    (..)
    static play.data.Form<Item> itemForm = form(Item.class);

public static Result newItem(){
    Item item = itemForm.bindFromRequest().get();
    item.save();
    return TODO;

}
4

1 に答える 1

2

name 属性をオーバーライドできず、正しいオプションを選択するコードが複数の値で機能しないため、デフォルトの選択ヘルパーでは不可能だと思います。Play の bindFromRequest メソッドが複数の値を取得するために必要な name 属性の追加の括弧 [] に注意してください。Play ソースで、bindFromRequest メソッドを確認してください: Playframework 2.1 フォーム クラス (Java)

これは、複数選択フィールドを処理するために使用するビュー ヘルパーです。

@(field: play.api.data.Field, options: Seq[(String,String)], args: (Symbol,Any)*)(implicit handler: FieldConstructor, lang: play.api.i18n.Lang)
@input(field, args:_*) { (id, name, value, htmlArgs) =>
  <select multiple="multiple" id="@id" name="@{name}[]" size="@{5 min options.length}">
    @for(i <- 0 until options.length) {
        <option id="@id" value="@options(i)._1"  
            @(if(field.indexes.exists(index => field("["+index+"]").value == Some(options(i)._1) ) ) "selected" else "")
        @toHtmlArgs(htmlArgs) >@options(i)._2</option>      
      }
  </select>
}

次のように使用できます。

@multiselect(itemForm("category"), options(Category.list), '_label -> "Category")

このソリューションは play 2.1 (scala) で動作しますが、play 2.0 (java) で動作するかどうかはテストしていません。

于 2013-02-26T10:32:30.617 に答える