множественный выбор выбора - Играть 2.0?

У меня большие проблемы с тем, чтобы Multiselect работал с моим приложением Play 2.0.

Я пробовал разные решения, которые нашел в Google, но ни одно из них не работает для 2.0.1.

Есть ли у вас какие-либо руководства или советы по работе с множественным выбором?

HTML...

<select multiselect="multiselect" ... name="groupIds[]"> ... </select>

Форма

class UserAdminForm{

public Long[] groupIds;

}

и позже в обработчике запросов...

Form<UserAdminForm> form = uform.bindFromRequest(); // Bam , [NumberFormatException: For input string: ""] 

Есть ли хороший способ работы с массивом POST?


person Petter Kjelkenes    schedule 08.05.2012    source источник
comment
что такое ‹select multiselect='multiselect'...›?? Разве вы не имеете в виду ‹выбрать несколько...›?   -  person virtualeyes    schedule 26.05.2012


Ответы (4)


У меня была та же проблема, я считаю, что помощник формы с множественным выбором - это ошибка в Play 2. В любом случае, я исправил ее, переименовав select как @name[]. Итак, вы создаете шаблон для напр. selectMultiple.scala.html, содержащий этот код:

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

@values = @{ field.indexes.map { v => field("[" + v + "]").value } }

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

@args.toMap.get('_default).map { defaultValue =>
    <option class="blank" value="">@defaultValue</option>
}
@options.map { v =>
<option value="@v._1" @{if(values.contains(Some(v._1))) "selected" else ""} >@v._2</option>
}
</select>
}

Имея в своей модели список для сопоставления компонента, вы используете этот шаблон на своей html-странице, например:

@selectMultiple(
    myForm("groupsId"),
    myOptions,
    '_label -> "My MultiSelect"          
  )

Надеюсь, это поможет вам! (обратите внимание, что я использую Play для Scala)

person Momog    schedule 14.08.2013

Вы можете создать шаблон следующим образом:

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

@values = @{ field.indexes.map { v => field("[" + v + "]").value } }

@input(field, args:_*) { (id, name, value, htmlArgs) =>
<select id="@id" name="@name" @toHtmlArgs(htmlArgs) multiple="multiple">
    @options.map { v =>
<option value="@v._1" @{if(values.contains(Some(v._1))) "selected" else ""}>@v._2</option>
    }
 </select>
}

Этот пример можно найти в группе обсуждения play-framework.

person Koray Güclü    schedule 28.12.2012

Ваша ошибка:

NumberFormatException: For input string: ""

Это означает, что вы получаете пустую строку, которую нельзя превратить в число. Лучше пометить поле в форме как необязательное, если можно не получить значение в этом поле.

person Pere Villega    schedule 09.05.2012

Пожалуйста, смотрите мой пример ниже play 2.2

Параметры раскрывающегося списка множественного выбора находятся в HashMap данных.

@(data:HashMap[String, HashMap[String,String]])
@import helper._

@select(field = myform("options"), options = data.get("options").toSeq, 
'_label -> "My Options*", '_showConstraints -> false, 'class ->"required", 
'id->"options", 'multiple->"multiple")
person dibble    schedule 09.07.2014