从Map的特定值设置下拉列表中的值

时间:2012-03-12 12:58:00

标签: grails

我在我的控制器中创建了一个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

我想是这样的,请建议是否有更好的方法来做这个或者你需要更多的细节

1 个答案:

答案 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 }" />

现在这更接近你的目标吗?