2011-12-06 45 views
1

我想通過以下方式使用命令對象:命令對象的數據綁定

class BeneficiaryCommand { 
    List<Beneficiary> tempBeneficiaries = org.apache.commons.collections.list.LazyList.decorate(new ArrayList(), new org.apache.commons.collections.functors.InstantiateFactory(Beneficiary.class)) 

    static constraints = { 
     tempBeneficiaries(validator: { 
      it.each{println it.beneficiary} // it.beneficiary is null, but I expect it to have name and address from the form 
     }) 
    } 
} 

class Beneficiary { 
    Contractor beneficiary // Contractor has name and address properties, both non-blank and non-nullable 
    Boolean save 
} 

普惠制的樣子:

<tr class="prop"> 
    <td valign="top" class="name"> 
     <label for="beneficiaries"><g:message code="contract.beneficiaries.label" default="New Beneficiary Name" /></label> 
    </td> 
    <td valign="top" class="value ${hasErrors(bean: i, field: 'name', 'errors')}"> 
     <g:textField name="tempBeneficiaries[0].name" /> 
    </td> 
</tr> 

<tr class="prop"> 
    <td valign="top" class="name"> 
     <label for="beneficiaries"><g:message code="contract.beneficiaries.label" default="New Beneficiary Address" /></label> 
    </td> 
    <td valign="top" class="value ${hasErrors(bean: i, field: 'address', 'errors')}"> 
     <g:textField name="tempBeneficiaries[0].address" /> 
    </td> 
</tr> 

<tr class="prop"> 
    <td valign="top" class="name"> 
     </td> 
    <td valign="top" class="value ${hasErrors(bean: beneficiaryCommand, field: 'save', 'errors')}"> 
     <div id="newBeneficiaryFlagDisplay"><g:checkBox name="tempBeneficiaries[0].save" /> Create new Beneficiary</div> 
    </td> 
</tr> 

命令對象的save屬性(由代表複選框)綁定到命令對象,但nameaddress不是。我也嘗試將文本字段名稱重命名爲tempBeneficiaries.beneficiary[0].name無濟於事。

關於如何將nameaddress捕獲到命令對象的任何想法?

+0

看來,'Beneficiary'類中的'Contractor'實例不實例化(對象是'null'並試圖'的println beneficiary.class'給'例外:null' – zoran119

回答

4

從你的命令的層次結構對象的字段的名稱應該是tempBeneficiaries[0].beneficiary.nametempBeneficiaries[0].beneficiary.address

這是我以前用來做類似的東西LazyList語法,但我不知道,如果你的語法一個問題都:

List<Beneficiary> copies = ListUtils.lazyList([], FactoryUtils.instantiateFactory(Beneficiary)) 

此外,您可以嘗試

Contractor beneficiary = new Contractor() 

Beneficiary類,以便塔對象在對象創建時可用來填充。

+0

我試過,很好,但沒有運氣,驗證器中的'println'只是打印'null'。 – zoran119

+0

我加了幾個其他的建議,你可以嘗試。 – schmolly159

+0

'Contractor beneficiary = new Contractor()'做了訣竅,非常感謝! – zoran119