如何为g:select标签编写一个集合

时间:2013-02-13 22:46:33

标签: grails select

enter image description here如何编写选项以便将其生成为HTML选择?这个问题是"选项"需要一个集合,而不是一个数组

这是我拥有的一切。我知道命名惯例很糟糕,我会解决这个问题,但是现在我已经解决了这个问题好几天了。

控制器类

import org.springframework.dao.DataIntegrityViolationException
import grails.plugin.mail.*

class EmailServiceController {

    static defaultAction = "contactService"

def contactService() {
    def options = new ArrayList()
    options.push("Qestions about service")
    options.push("Feedback on performed service")
    options.push("Other")
    options.push("Why am I doing this")
    options
}

    def send() {
        sendMail(){
            to "mygroovytest@gmail.com"
            from params.email
            subject params.subject
            body params.information
        }
    }
}

域类

class EmailService {

    static constraints = {
    }
}

g:从gsp中选择来电

<g:select name = "subject" from = "${options}" noSelection="Topic"/>

还尝试使用&#34; $ {selectOptions}&#34;而不是&#34; $ {options}&#34;没有运气

def selectOptions() {
    def options = new ArrayList()
    options.push("Qestions about service": "QAS")
    options.push("Feedback on performed service":"FoPS")
    options.push("Other":"Other")
    options.push("Why am I doing this":"WHY")
    return options
}

3 个答案:

答案 0 :(得分:6)

好的,我我可能知道这里发生了什么。这个问题的缺失部分是gsp被称为什么。这是适当的方式:

class EmailServiceController {

  def contactService() {
    def options = ["Qestions about service", "Feedback on performed service", "Other"]
    // assumes you are going to render contactService.gsp
    // you have to push the options to the view in the request
    [options:options]
  }

}

然后在contactService.gsp中你会得到:

<g:select name="subject" from="${options}" noSelection="['Topic': 'Topic']"/>

答案 1 :(得分:3)

您的options既不是数组也不是地图。存在语法错误。这就是为什么你的选择中只有一个选项。您需要输入真实列表或地图,如下所示:

def selectOptions() {
    def options = [:]
    options["Qestions about service"] = "QAS"
    options["Feedback on performed service"] = "FoPS"
    [options:options]
}

使用地图,您可以在视图中使用它:

<g:select name="subject" from="${options.entrySet()}" 
    optionValue="key" optionKey="value"
    noSelection="['Topic': 'Topic']"/>

答案 2 :(得分:0)

您需要在代码中使用双引号,而不是单引号。使用单引号,您只需传递一个看起来像'${options}'的字符串,而不是传递值为options的GString。

<g:select name="subject" from="${options}" noSelection="Topic"/>

此外,假设您正在调用contactService操作,则需要return options而不是返回options.push("Other")push()返回一个布尔值,这意味着contactService的隐式返回是push()而不是options的布尔结果。