2013-03-08 82 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