grails - 在gsp中动态选择

标签 grails gsp

嗯,它不是那么动态,但是会根据域中的一组字段来更改其内容。

我在4个字段中有4个价格,然后我有一个字段指出要使用的价格。

我创建了要选择的那些价格的列表,其中一些价格可以为空,因此不应显示在列表中。

我在创建列表的域中使用了beforeInsert。
但是我只得到一个字符串,每个元素都用“;”分隔因此在select中将只包含一个包含所有元素的字符串。

它必须与我生成的列表类型有关,因此我需要帮助以了解如何正确创建此列表。

域:

class Author {
    def String name
    def String email
    def BigDecimal price1
    def BigDecimal price2
    def BigDecimal price3
    def BigDecimal price4
    def String choosedCert
    def List<String> availableCert

    static transients = ['availableCert']

    static constraints = {
        name nullable:true
        email nullable:true
        price1 nullable:true
        price2 nullable:true
        price3 nullable:true
        price4 nullable:true
    }

    def beforeInsert() {
       availableCert = getAvailableCert()         
    }

    def List<String> getAvailableCert() {
        def List<String> sl = new ArrayList<String>()
        if (price1 != null) sl.add('FSC')
        if (price2 != null) sl.add('PEFC')
        if (price3 != null) sl.add('CW')
        if (price4 != null) sl.add('UC')
        return sl
    }
}

和gsp中的行:
<g:select name="choosedCert" from="${author.availableCert}
 "value="${choosedCert}" />

// ----------

纠正我的错字后:
<g:select name="choosedCert" from="${author?.availableCert}" value='' />

但是我仍然有问题:

当我选择“FSC”时,我在chooseedCert中得到的值为“FSC”,如果我随后将选择一个新值,例如'UC'我将得到UC,FSC的值。
这是一个edit.gsp,因此,每次更新后,我都会一直将所选值添加到现有值中,因此在再次选择“PEFC”进行更新后,我将获取“PEFC,UC,FSC”,因此新值是首先插入,然后再添加旧值。

最佳答案

由于您正在编辑脚手架 View ,因此最终得到2个名为choosedCert的元素,理想情况下,您需要创建自己的edit.gsp并仅呈现所需的元素,但作为示例,我做了以下操作。

在BootStrap中添加了一个Author,如下所示:

def init = { servletContext ->
    new Author( name: 'Dave', email: 'myemail', price1: new BigDecimal(1), price2: new BigDecimal(2), choosedCert: 'FSC' ).save( failOnError: true )
}

然后在AuthorController中编辑更新操作:
...
author.choosedCert = params.availableCert
author.save flush:true
...

然后在edit.gsp中:
...
</fieldset>
    <g:select name="availableCert" from="${author.availableCert}" value="${author.choosedCert}" />
<fieldset class="buttons">
...

显然,这不是理想的选择,因为您仍然有Grails呈现的selecteddCert文本元素,并且下拉样式元素未应用任何样式,但是如果更改下拉列表并更新,则正确的值将保存在域对象的chooseCert中。
脚手架是使事情前进的好方法,但确实有局限性,最终您将最终编写自己的gsp并使用服务进行事务处理。

关于grails - 在gsp中动态选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42957186/

相关文章:

php - Quercus PHP Grails字符编码问题

hibernate - Grails sessonFactory在 Controller 中为null

grails - Grails 2.2.3-项目根目录中的大量资源使应用程序永久挂起

Grails 2.0 CreateCriteria私有(private)属性无法查询

grails 单选按钮 True 或 false 检查属性

grails - 从Grails Controller 模板中的脚手架功能获取错误列表

html - DIV 突破 P 标签

javascript - 从 javascript 访问 messages.properties 值

grails - 当显示在.gsp View 中时,如何使GroovyfirstRowResult仅列出值,而不列出列标题且不包含花括号?

grails - 将参数传递给表格grails