2013-03-08 48 views
5

我想提出使用<g:select/>这相当于这个网站一个选择框:如何使与g常数列表项选择框:选择

<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> 

这一切工作正常,但我想改变这种丑陋<select><g:select>

回答

8
<g:select id="myselect" name="myselect" value="${myInst.color}" 
      from="${['r': 'RED', 'g': 'GREEN', 'b': 'BLUE']}" 
      optionKey="key" optionValue="value" /> 
+2

然而,如果你打算做这样的事情,我建议使用taglib制作一个“selectColor”标签。试图找到在GSP中放置所有这些魔术常量的位置是非最优的。另外,测试taglib更容易。 – billjamesdev 2013-03-10 01:48:57

-1

你必须申报“myselect”在你的域类中。我也遇到过这个问题,但我比你提前两周。见how do I write a set for g:select tag

+0

嗯@安德鲁的答案为我工作... – Anthony 2013-03-08 17:24:49

+0

@Sharma他的答案工作,因为他的“从”是嵌入在声明内。这不是使用g:select的正常方式。事实上,在这种情况下使用g:select是没有好处的,如果你只是在你的GSP中对select语句进行硬编码。通常来说,您可以使用g:select从数据库中检索“from”项或者在您的域类(或应用程序层)中检索硬编码值。更不用说它降低了不习惯grails的人的可读性 – 2013-03-08 17:30:15

+0

我很困惑,为什么这会一直下降。人们变得懒惰,他们只是在没有解释任何事情的情况下退缩 – 2013-03-12 12:58:02