2.1.4-java-如何将@options helper与Map一起使用<;字符串,字符串>;作为参数
我正在创建一个自定义HTML来获取电话号码的输入。这应该是一个带有电话类型选择框和电话号码文本框的控制组。布局需要与内置HTML助手@select和@inputText所做的不同。因此,我的代码如下所示:2.1.4-java-如何将@options helper与Map一起使用<;字符串,字符串>;作为参数,java,playframework,Java,Playframework,我正在创建一个自定义HTML来获取电话号码的输入。这应该是一个带有电话类型选择框和电话号码文本框的控制组。布局需要与内置HTML助手@select和@inputText所做的不同。因此,我的代码如下所示: @phoneGroup(field: Field, className: String = "phone") = { <div class="control-group"> <label class="control-label" for="@field("typ
@phoneGroup(field: Field, className: String = "phone") = {
<div class="control-group">
<label class="control-label" for="@field("type").id">@Messages("company.phoneNumbers")</label>
<div class="controls">
<select id="@field("type").id" name="@field("type").name">
@options(models.PhoneType.options)
</select>
<input type="text" id="@field("number").id" name="@field("number").name" value="@field("number").value">
</div>
</div>
}
@repeat(companyForm("phones"), min = 2) { phone =>
@phoneGroup(phone)
}
<select id="@field("type").id" name="@field("type").name" class="input-small">
@for((value, text) <- models.PhoneType.options) {
<option value="@value"
@if(Some(value) == (field("type").value)) { selected }>@text</option>
}
</select>
在生成的HTML中,除了由
@options(models.PhoneType.options)
以下是生成的HTML:
<div class="control-group">
<label class="control-label" for="phones_0__type">Phone numbers</label>
<div class="controls">
<select id="phones_0__type" name="phones[0].type">
(MAI,Main)(MOB,Mobile)(FAX,Fax)(CUS,Custom)
</select>
<input type="text" id="phones_0__number" name="phones[0].number" value="">
</div>
</div>
电话号码
(MAI,Main)(移动,移动)(传真,传真)(客户,海关)
显然,@options只是输出了我在models.PhoneType.options中传递给它的映射的字符串表示形式。所以问题是,如何使用@options helper生成以下HTML:
<option value="MAI">Main</option>
<option value="MOB">Mobile</option>
<option value="FAX">Fax</option>
<option value="CUS">Custom</option>
Main
可移动的
传真
习俗
我是一名Java程序员,没有任何Scala经验。这可能是一件小事,但我没有找到任何例子
先谢谢你。
-德米特里
更新2013-11-07-在下面的答案部分发布的解决方案@选项只是一个对象,不处理HTML本身的输出。这是在传递选项对象的“选择”辅助对象中完成的。如果不能使用@select,可以从源中复制相关位 谢谢你的线索,大卫。我没有使用@select的原因是,它还围绕select标记生成一些格式化HTML,我想控制组件的布局。因为我不知道如何正确地定制@select,所以我现在走这条路。好的,正如你所建议的,我只是复制了选项Scala代码,它做到了:
<select id="@field("type").id" name="@field("type").name" class="input-small">
@options(models.PhoneType.options).map { v =>
<option value="@v._1"
@if(Some(v._1) == (field("type").value)) { selected }>@v._2</option>
}
</select>
@选项(models.PhoneType.options).map{v=>
@v、 _2
}
唯一需要注意的是,我必须使用一些(v._1)作为inputRadioButtonGroup代码(),否则比较就不起作用。我必须学习一点scala才能理解这是为什么:)
或者,for循环也可以工作,如下所示:
@phoneGroup(field: Field, className: String = "phone") = {
<div class="control-group">
<label class="control-label" for="@field("type").id">@Messages("company.phoneNumbers")</label>
<div class="controls">
<select id="@field("type").id" name="@field("type").name">
@options(models.PhoneType.options)
</select>
<input type="text" id="@field("number").id" name="@field("number").name" value="@field("number").value">
</div>
</div>
}
@repeat(companyForm("phones"), min = 2) { phone =>
@phoneGroup(phone)
}
<select id="@field("type").id" name="@field("type").name" class="input-small">
@for((value, text) <- models.PhoneType.options) {
<option value="@value"
@if(Some(value) == (field("type").value)) { selected }>@text</option>
}
</select>
@for((值,文本)