我在我的控制器中创建了一个Map并将其传递给View.I有一个下拉列表,用于填充数据库中的值。值为“1”,“2”,“3”。我想选择从Map的值下拉 与第一个下拉列表一样,所选值将是Map的第一个元素,对于下一个下拉列表,所选值将是Map的第二个值,依此类推,我猜它可以从select选项卡的value属性完成但是如何?感谢任何帮助
e.g
我在控制器中创建了一个Map并将其传递给视图
def Population={
def scores=["1":2,"2":3,"3":2,"4":2,"5":3,"6":1]
return new ModelAndView("/scores/scoreCheck",scores)
}
在视图中我使用它如下
<td><g:select name="SCBFScore" id="SCBFScore" from="${Decode.findAllByAttributeShortName('HASCORE1').collect{it.attributeCodeText}}"
value="${scores?.get('1')}" noSelection="${['':'Select...']}"
</td>
我的要求是选择地图分数键值为“1”的下拉列表。 这里是查询
Decode.findAllByAttributeShortName('HASCORE1').collect{it.attributeCodeText}
返回[“1”,“2”,“3”]
感谢您的回复
我有一个功能,可以为玩家提供过去6年的跑步分数。我有一个模块,玩家可以看到或更新他的分数,但不能创建一个全新的分数。他的所有分数的数据应该从另一个来源加载。当应用程序加载时,它将加载他拥有的最新分数。他有三个级别的分数“1”,“2”,“3”因此他只能得分一个当应用程序最初加载最后得分的数据时,我想在视图中预设得分的值。
e.g 在控制器中,我将所有6年的分数和商店都抽取到地图中,以便地图的分数格式为
['得分为2012':'2',[得分为2011:'3'],[得分为2011]:'1',[得分为2010]:'2'等等
因此,假设2012年球员得分为2 因此,当视图加载时,它将为2012年预设组合框2,组合框将具有值1,2,3
所以2011年 视图预设2011年的下拉列表为3,组合框的值为1.2,3
我想是这样的,请建议是否有更好的方法来做这个或者你需要更多的细节
答案 0 :(得分:1)
g:select的 value 属性有不同的用途。如果您正在填写g:从域对象列表中选择,则可以指定域类属性,该属性用于存储值 - 或预设(如果已包含某些值)。 / p>
简单的例子。你有一个域名菜单和内容,在你想要分配默认内容的菜单中(snipet来自我的代码,'menuInstance'是我正在使用的实际域对象):
<g:select name="defaultContent.id"
from="${my.package.Content.list()}"
optionKey="id"
value="${menuInstance?.defaultContent?.id}" />
我理解你的目标:你想要为每个列表框传递一个包含多个值列表的地图,对吗?所以你应该在控制器中创建这样的地图:
return [ 'listbox1': list1, 'listbox2':list2 ]
在视图中,您只需将'listbox1'用于g:select的 属性。
因此,在您进一步解释之后,我宁愿使用一些DTO来解决问题。在你的src / groovy(或src / java)下创建一个DTO:
public class ScoreDTO {
String season
int score
public String toString() { return "Season $season: $score" }
}
在您的控制器中,它应该如下所示:
ScoreDTO score1 = new ScoreDTO( season:'2012', score:3 )
ScoreDTO score2 = new ScoreDTO( season:'2011', score:1 )
ScoreDTO score3 = new ScoreDTO( season:'2010', score:2 )
def seasons = [ score1, score2, score3 ]
return [ 'seasons':seasons ]
在您看来,您可以使用它:
<g:select name="score" from="${ seasons }" />
现在这更接近你的目标吗?