2

在此处输入图像描述如何编写选项以便将其生成为 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"/>

还尝试了以下使用“${selectOptions}”而不是“${options}”但没有运气

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

3 回答 3

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']"/>
于 2013-02-14T02:16:03.930 回答
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']"/>
于 2013-02-14T00:06:56.307 回答
0

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

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

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

于 2013-02-13T22:59:59.550 回答