使grails有条件地选择组合框中的项目

时间:2013-11-11 17:49:07

标签: grails gsp

<g:select name="division.id"
    from="${divisionInstance}"
    value="${name}" 
    optionKey="id"
    optionValue="${{"${it}"}}"
    noSelection="['':'Please select']"
    required="" />

我想要发生什么,如果

divisionInstance.id == personInstance.divisionId 

然后选择该项目

2 个答案:

答案 0 :(得分:1)

应该像这样工作

<g:select name="division.id"
    from="${divisionInstance}"
    value="${personInstance.divisionId}" 
    optionKey="id"
    optionValue="${{"${it}"}}"
    noSelection="['':'Please select']"
    required="" />

类似于select标记文档中的最后一个示例:http://grails.org/doc/latest/ref/Tags/select.html

<g:select optionKey="id" value="${favoriteBook.id}"
    name="book" from="${bookList}" />
  

在这种情况下,value应该包含favouriteBook的ID而不是book对象本身,因为optionKey被设置为id属性。

因此,在您的情况下,您有一个迭代列表,您的optionKey设置为idvalue评估为true的条目将被选中。如果value设置为${personInstance.divisionId},则选择条件为:

divisionInstance.id == personInstance.divisionId 

答案 1 :(得分:0)

这可能不是在DRY之后,但它就像

一样简单
<g:if test="${divisionInstance.id == personInstance.divisionId }>
<g:select name="division.id"
    from="${divisionInstance}"
    value="${personInstance.divisionId}" 
    optionKey="id"
    optionValue="${{"${it}"}}"
    noSelection="['':'Please select']"
    required="" />
</g:if>
<g:else>
<g:select name="division.id"
    from="${divisionInstance}"
    value="${name}" 
    optionKey="id"
    optionValue="${{"${it}"}}"
    noSelection="['':'Please select']"
    required="" />
</g:else>

我想知道是否不可能这样做:

<g:select name="division.id"
    from="${divisionInstance}"
    value="${if(divisionInstance.id == personInstance.divisionId){return personInstance.divisionId}else{return name}}" 
    optionKey="id"
    optionValue="${{"${it}"}}"
    noSelection="['':'Please select']"
    required="" />

但我暂时无法测试