【发布时间】:2017-03-22 16:12:19
【问题描述】:
嗯,它不是那么动态,但会根据域中的一组字段来改变它的内容。
我在 4 个字段中有 4 个价格,然后我有一个字段表示要使用哪个价格。
我创建了一个可供选择的价格列表,其中一些价格可以为空,并且不应显示在列表中。
我在创建列表的域中使用了 beforeInsert。 但我只得到一个字符串,每个元素用';'分隔所以在选择中将只包含一个包含所有元素的字符串。
它必须是我生成的列表类型,所以我需要帮助才能知道如何正确创建此列表。
域名:
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”时,我会在 selectedCert 中将值设为“FSC”,如果然后我将选择一个新值,例如'UC' 我会得到 UC,FSC 的值。 这是一个edit.gsp,所以每次更新后,我都会将选定的值添加到现有值中,所以在再次更新选择“PEFC”后,我会得到“PEFC,UC,FSC”,所以新值是首先插入,然后添加旧值。
【问题讨论】:
-
看来您可能搞错了,您要解决的基本问题是什么?为什么不使用单个 Map 属性,而不是将价格硬编码为字符串?
-
我只想在 GSP 中获得一个 SELECT,它只列出与正确价格对应的字符串。 IE。如果 price1、price2 和 price4 包含价格,则 SELECT 应包含字符串“FSC”、“PEFC”和“UC”。 And when a string is selected, that string should be set in 'choosedCert'.就是这样。