8

私のフォームでは、ドロップダウンを定義しました:

@select(
myForm("category_id"),
options(Category.options()),
'_label -> "Category",
'_default -> "-- Choose a Category --",
'_showConstraints -> false
)

私のコントローラーコードで:

Form<Category> catForm = form(Category.class).bindFromRequest();
if(catForm.hasErrors()) {
return badRequest(categoryEdit.render(catForm));
}

フォーム送信でデフォルト値を選択できず、選択しないと catForm.hasErrors() が true になります。2 つの質問:

  1. ドロップダウンリストでデフォルト値を選択できるようにするにはどうすればよいですか?

  2. デフォルト値を にしたいのですが-1、どこに設定すればよいですか? (オプションに関連付けられた値がない場合、問題はここにあるのではない-- Choose a Category --でしょうか?)

4

3 に答える 3

3

aviks の提案が機能しています。テンプレートを正しくインポートしていない可能性があります。私はこのようにしました。まず、avik が提案したように、 customSelectField.scala.htmlを作成しました。views/helper/

@(field: play.api.data.Field, options: Seq[(String,String)], args: (Symbol,Any)*)(implicit handler: FieldConstructor, lang: play.api.i18n.Lang)

@getAsTuple(x : Any) = @{
    x match {
        case (value: String, text: String) => (value, text)
        case _ => ("-1", "Select")
    }
}

@input(field, args:_*) { (id, name, value, htmlArgs) =>
    <select id="@id" name="@name" @toHtmlArgs(htmlArgs)>


@args.toMap.get('_default).map { dv =>
    <option class="blank" value="@getAsTuple(dv)._1">@getAsTuple(dv)._2</option>
}

@options.map { v =>
    <option value="@v._1" @(if(value == Some(v._1)) "selected" else "")>@v._2</option>
}
</select>
}

そして、私のテンプレート、たとえば index.scala.html で、私が行う選択が必要な場所:

@import helper._ 

@helper.customSelectField(
 field = proposeNewTimeForm("selectTime"),
 options = times.get,
 '_label -> "Category",
 '_default -> ("-1" -> "-- Choose a category --"),
 '_showConstraints -> false
)

してはいけないことを覚えておいてください:

@implicitField = @{
        FieldConstructor(helper.customSelectField.f)
    }

これはエラーの原因となるためです。

select を囲む html を何らかの方法でフォーマットしたい場合はcustomField.scala.html、views/helper/ で私と同じように行うことができます:

@(elements: helper.FieldElements)

@elements.input
<span class="errors">@elements.errors.mkString(", ")</span>
<span class="help">@elements.infos.mkString(", ")</span>

そして、の上部にindex.scala.html

@import helper._
@implicitField = @{
    FieldConstructor(helper.customField.f)
}

お役に立てれば!

于 2013-06-12T13:28:31.433 に答える
1

同様の問題があり、より簡単な解決策を見つけました。
遊びの代わりに!ヘルパーはフォーム内でこれを試します:

<select name="category_id">
    <option value="-1">-- Choose a Category --</option>
    @(for((key, value) <- Category.options()){
        <option value="@value"> @key </option>
    }
</select>
于 2014-01-18T22:56:25.693 に答える