[Grails] 下拉列表数据绑定问题

qilin 2008-12-25
初学grails,遇到一个问题:

user表中,字段cred_type(证件类型)的取值为,S-身份证,J-军官证,Q-其他
现有另一个表,表名为col_desc,用来存储这些值-名对的映射,字段如下:
table_name
col_name
col_value
col_desc

现在在做user的录入界面时,将证件类型作为g:select,如何将其与col_desc表中table_name=user、col_name=cred_type的那一批记录关联起来?

qilin 2008-12-26
附:通常我的做法是在controller中获得这个list,传给页面。在这里我是想问,grails有没有更简单的方法,比如在<g:select>中配置一个ColDesc.findAllBy...的方法,直接就关联上。

人气不是特别旺啊。

qilin 2008-12-26
grails确实可以在<g:select>的from属性中定义findAllBy...

可问题又来了,如果查询条件无法使用动态查找器,该怎么办?

看了看有个withCriteria,但如何写在from属性中呢?
如下写法倒是没问题:
from="${FieldDesc.withCriteria{eq('tableName','user')}}"
甚至下面的写法也行:
from="${FieldDesc.withCriteria{and{eq('tableName','user')}}}"
可如果有多个查询条件,就不知道该怎么写了。如下写法报错:
from="${FieldDesc.withCriteria{and{eq('tableName','user') eq('colName','cred_type') eq('state','U')}}}"

看来真要买本书了,老这样空手套白狼,早晚有失手的时候呀。
qilin 2008-12-26
目前的解决办法是:

在action中,将
FieldDesc.withCriteria{
  and{
    eq('tableName','user')
    eq('colName','cred_type')
    eq('state','U')
  }
}
查出,然后传给视图,只能这样了吗?
qilin 2008-12-30
真的是会者不难,难者不会呀。

除了以上方法,仍有以下两种替代方法,孰优孰劣,各位沉默的大侠自己考虑吧:

1.定义服务类,在其中定义方法getColDescList(table_name,col_name,state),然后在gsp->g:select->from中,直接调用该方法。

2.在gsp->g:select->from中,直接使用ColDesc.executeQuery(......)
wind13 2009-02-16

<g:select from="${ColDesc.findAllWhere('table_name':'user','col_name':'cred_type')}"></g:select>

还有一些写法……可以看Grails Framework Reference Documentation.

Global site tag (gtag.js) - Google Analytics