Playframework @使用Scala Temlate中的Int值进行选择

Playframework @使用Scala Temlate中的Int值进行选择,playframework,playframework-2.0,Playframework,Playframework 2.0,我正在使用play-2.0.3。 我有一张地图,想用Int->String(使用@select之类的东西)填充下拉列表。 我知道@select只接受Seq[(String,String)。 如何重载此帮助程序以接受Seq[(Int,String)] 我已尝试做以下工作: 已将select.scala.html的源文件复制到views/mySelect.scala.html 为了我的目的编辑了它 @** *生成一个HTML选择。 * *例如: * {{{ *@select(field=myForm

我正在使用play-2.0.3。
我有一张地图,想用Int->String(使用@select之类的东西)填充下拉列表。
我知道@select只接受Seq[(String,String)。
如何重载此帮助程序以接受Seq[(Int,String)]

我已尝试做以下工作:
  • 已将select.scala.html的源文件复制到views/mySelect.scala.html
  • 为了我的目的编辑了它
  • @**
    *生成一个HTML选择。
    *
    *例如:
    * {{{
    *@select(field=myForm(“isDone”),options=options(“是”、“否”)
    * }}}
    *
    *@param字段是表单字段。
    *@param args一组额外属性。
    *@param handler是字段构造函数。
    *@
    @导入助手_
    @(field:field,options:Seq[(Int,String)],args:(符号,任意)*)(隐式处理程序:FieldConstructor,lang:play.api.i18n.lang)
    @输入(字段,参数:*){(id,名称,值,htmlArgs)=>
    @args.toMap.get(''u default).map{defaultValue=>
    @默认值
    }
    @options.map{v=>
    @v、 _2
    }
    }
    
    但这似乎不起作用

    戏说

    ')' expected but identifier found. 
    
    排队

    @(field: Field, options: Seq[(Int,String)], args: (Symbol,Any)*)(implicit handler: FieldConstructor, lang: play.api.i18n.Lang) 
    
    顺便问一下,(符号,任意)后面的*是什么?
    游戏不喜欢它。 即使我删除了这个*,play也会说:

     not found: value field 
    
    指的是同一行


    请帮帮我。

    删除“@import helper.\uz”。每个scala模板文件都是后台函数。“@(字段:字段,选项:Seq[(Int,String)],args:(符号,Any)*)(隐式处理程序:FieldConstructor,lang:play.api.i18n.lang)”行必须是第一行。

    我找到了解决方案

    @**
    * file views/mySelect.scala.html 
    *
    * Generate an HTML select.
    *
    * Example:
    * {{{
    * @select(field = myForm("isDone"), options = options("Yes","No"))
    * }}}
    *
    * @param field The form field.
    * @param args Set of extra attributes.
    * @param handler The field constructor.
    *@
    
    
    @(field: Field, listOptions: Map[Integer,String], args: (Symbol,Any)*)(implicit handler: views.html.helper.FieldConstructor, lang: play.api.i18n.Lang)
    @import helper._
    @input(field, args:_*) { (id, name, value, htmlArgs) =>
        <select id="@id" name="@name" @toHtmlArgs(htmlArgs)>
        @args.toMap.get('_default).map { defaultValue =>
            <option class="blank" value="">@defaultValue</option>
        }
        @listOptions.map { v =>
            <option value="@v._1" @(if(value == Some(v._1)) "selected" else "")>@v._2</option>
        }
        </select>
    }
    
  • 现在我们可以

    @import mySelect 
    
    像这样使用它

    @mySelect(
        userForm("room"), 
        rooms, @* Map<Integer, String>* rooms*@ 
        '_default -> Messages.get("chooseRoom"),
        '_showConstraints -> false
        )
    
    连同

    @import helper._ 
    
    因为它会导致选项的含义不明确,因为它也是来自views.html.helper的函数

  • options: Map[Integer,String]
    
    @import helper._