grails - 从 map 的特定值的下拉列表中设置值

我在 Controller 中创建了一个 map 并将其传递给 View。我有一个下拉列表,用于填充数据库中的值。值是“1”、“2”、“3”。我想从下拉列表中选择 map 的值(value)
就像第一个下拉列表一样,所选值将是 Map 的第一个元素,对于下一个下拉列表,所选值将是 Map 的第二个值,依此类推,我想这可以从选择选项卡的 value 属性中完成,但是怎么样?任何帮助表示赞赏

例如

我在 Controller 中创建了一个 map 并将其传递给查看

def Population={

def scores=["1":2,"2":3,"3":2,"4":2,"5":3,"6":1]

return new ModelAndView("/scores/scoreCheck",scores)

} 

在 View 中我正在使用它,如下所示
<td><g:select name="SCBFScore" id="SCBFScore" from="${Decode.findAllByAttributeShortName('HASCORE1').collect{it.attributeCodeText}}" 
value="${scores?.get('1')}" noSelection="${['':'Select...']}"
</td>

我的要求是选择带有 map 分数键“1”的下拉列表。
这里是查询
 Decode.findAllByAttributeShortName('HASCORE1').collect{it.attributeCodeText}

返回 ["1","2","3"]

谢谢回复

我有一个玩家过去 6 年的跑分的功能。我有一个模块,玩家可以看到或更新他的分数,但不能创建一个全新的分数。他的所有分数的数据应该从另一个来源加载。当应用程序加载时,它将加载他的最新分数。他有三个级别的分数“1”,“2”,“3”,所以他只能得分一个三。我想在应用程序最初加载最后一个分数的数据时在 View 中预设分数的值。

例如
在 Controller 中,我提取了所有 6 年的分数并存储在 map 中,因此 map 的分数格式为

['2012 年得分':'2',[2011 年得分:'3'],[2011 年得分]:'1',[2010 年得分]:'2'] 等

所以假设在 2012 年,玩家得分为 2
因此,当 View 加载时,它将为 2012 年预设组合框为 2,组合框的值为 1、2、3

所以对于 2011 年
View 将 2011 年的下拉列表预设为 3,组合框的值为 1.2,3

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

最佳答案

g:select 的 value 属性有不同的用途。如果要从域对象列表中填充 g:select,则可以指定域类属性,该属性用于存储值 - 或预设,如果它已经包含一些值。

简单的例子。您有一个域菜单和内容,t 并且在菜单中您要分配默认内容(我的代码中的片段,'menuInstance' 是实际的域对象,我正在使用):

<g:select name="defaultContent.id"
          from="${my.package.Content.list()}"
          optionKey="id"
          value="${menuInstance?.defaultContent?.id}" />

我理解您的目标:您想将包含每个列表框的多个值列表的 map 传递给 View ,对吗?所以你应该像这样在 Controller 中创建 map :
return [ 'listbox1': list1, 'listbox2':list2 ]

在 View 中,您只需将“listbox1”用于 g:select 的 from 属性。

因此,经过您的进一步解释,我宁愿使用一些 DTO 来解决问题。在您的 src/groovy(或 src/java)下创建一个 DTO:
public class ScoreDTO {
  String season
  int score

  public String toString() { return "Season $season: $score" }
}

在您的 Controller 中,它应该如下所示:
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 }" />

现在离你的目标更近了吗?

https://stackoverflow.com/questions/9667430/

相关文章:

grails - 对grails的 Ant 调用因 “[exec] Application is p

grails - 将grails选择值传递给actionSubmit to Javascript方法

grails - User.get()在Grails 2.0中损坏,返回null

hibernate - 复合键另存为null

grails - 如何从 grails 查询中访问属性

grails - 标准的单元测试模拟

grails - Grails url映射从sperate配置文件传递数据

grails - 在运行应用程序完成后,grails应用程序会自动连续自动重新加载

grails - Grails 中是否有首选/标准方式将表单参数绑定(bind)到域对象列表?

grails - Grails的 Controller