Grails 如何使用g:select创建包含常量列表项的选择框

Grails 如何使用g:select创建包含常量列表项的选择框,grails,groovy,Grails,Groovy,我想使用创建一个选择框,该框可转换为以下html: <select id="myselect" name="myselect"> <option value="r">RED</option> <option value="g">GREEN</option> <option value="b">BLUE</option> </select> 红色 绿色 蓝色 我还希望在页面重新加载时从

我想使用
创建一个选择框,该框可转换为以下html:

<select id="myselect" name="myselect">
  <option value="r">RED</option>
  <option value="g">GREEN</option>
  <option value="b">BLUE</option>
</select>

红色
绿色
蓝色
我还希望在页面重新加载时从bean中预选该值

我在一个表中执行此操作,因此我有一个表,每行有一个单独的选项框

我目前正在以下html中完成这项工作:

<g:each in=${mylist} status="i" var="myInst">
   <select id="status${myInst}" name="status${myInst}" data-id="${myInst.id}">
      <option value="r" <g:if test="${myInst.color == "r"}">selected</g:if>>RED</option>
      <option value="g" <g:if test="${myInst.color == "g"}">selected</g:if>>Green</option>
      <option value="b" <g:if test="${myInst.color == "b"}">selected</g:if>>BLUE</option>
   </select>
</g:each>

红色
绿色
蓝色
这一切都很好,但我想把难看的
改成



您必须在域类中声明“myselect”。我在这方面也遇到了麻烦,但我比你早了两周。参见

@Sharma他的回答之所以有效,是因为他的“from”被嵌入了语句中。这不是使用g:select的正常方式。事实上,在这种情况下,如果只是在GSP中硬编码select语句,那么使用g:select并没有任何好处。通常来说,您会使用g:select从数据库中检索“from”项,或者在域类(或应用程序层)中检索硬编码的值。更不用说它降低了不习惯grailsI的人的可读性,我不明白为什么这一点一直被否决。人们是否变得如此懒惰,以至于他们只是不做任何解释就否决了投票。然而,如果你打算做这样的事情,我建议使用taglib制作一个“selectColor”标记。当这些神奇常数在GSP中时,试图找到它们的位置不是最优的。另外,测试taglib要容易得多。
<g:select id="myselect" name="myselect" value="${myInst.color}"
          from="${['r': 'RED', 'g': 'GREEN', 'b': 'BLUE']}"
          optionKey="key" optionValue="value" />