复选框列表

2024-04-13

我有两个域类

class Contract {
    String number
    static hasMany = [statements:Statement]
}

class Statement {
    String code
    static hasMany = [contracts:Contract]
}

我想显示 gsp 中可用的所有报表,并在每个报表旁边都有一个复选框,允许用户选择哪些报表适用于合同。所以像这样:

[ ] Statement Code 1
[ ] Statement Code 2
[ ] Statement Code 3

我是这样开始的:

<g:each in="${Statement.list()}" var="statement" status="i">
    <g:checkBox name="statements[${i}].id" value="${statement.id}" checked="${contractInstance.statements.contains(statement.id)}" />
    <label for="statements[${i}]">${statement.code}</label>
</g:each>

但我只是无法获取控制器的已检查语句列表(有null列表中的元素,有重复的语句...)。

知道如何实现这一目标吗?


这是可能的,但确实需要一些技巧。首先,每个复选框必须具有相同的名称“statements”:

<g:each in="${org.example.Statement.list(sort: 'id', order: 'asc')}" var="statement" status="i">
    <g:checkBox name="statements" value="${statement.id}" checked="${contract.statements.contains(statement)}" />
    <label for="statements">${statement.content}</label>
</g:each>

其次,在控制器中,您必须在绑定之前删除“_statements”属性:

def contract = Contract.get(params.id)
params.remove "_statements"
bindData contract, params
contract.save(failOnError: true)

复选框支持并不是针对此用例设计的,因此需要进行修改。多选列表框是此类场景中通常使用的框。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

复选框列表 的相关文章

随机推荐