2017-09-06 48 views
0

我正在开发一个使用记录贷款的grails的简单应用程序。有三个简单的域类:类型不匹配错误使用g:与域对象一起选择

  1. CompanyCategory - 两种基本类型类别,“银行” &“其他”
  2. 公司 - 所有这些都在系统的公司。
  3. 贷款 - 记录我们从哪家银行借钱,以及多少钱。

以下是简单的域类:

class CompanyCategory { 

    String categoryName 

} 

class Company { 

    String    companyName 
    CompanyCategory  category 

} 

class Loan { 

    Company  bank 
    BigDecimal loanAmount 

} 

从我的控制,我已找到了所有的银行类,并将它传递给我的GSP公司,因为这样的:

def create() { 

    // Looking for all the companies that are of Bank category 
    def banks = Company.findAllByCategory(CompanyCategory.findAllByCategoryName("Bank")) 

    respond new Loan(params), model:[banks: banks] 
} 

在我的GSP,这是它的样子:

 <g:form resource="${this.loan}" method="POST"> 


      <fieldset class="form"> 

       <f:field bean="loan" property="bank" > 
        <g:select name="lender" from="${banks}" value="{banks?.id}" /> 
       </f:field> 

       <f:field bean="loan" property="loanAmount" /> 

      </fieldset> 


      <fieldset class="buttons"> 
       <g:submitButton name="create" class="save" value="${message(code: 'default.button.create.label', default: 'Create')}" /> 
      </fieldset> 
     </g:form> 

到此为止,我们可以从下拉菜单中看到只有银行显示在下拉列表中,其余的公司则没有。

然而,当我尝试提交表单,我得到以下错误:

属性类[类test.Loan]的[银行]不能

我做了什么错为空?还是有更好的方法来做到这一点?

在此先感谢。

EDIT 1

这是保存方法

@Transactional 
def save(Loan loan) { 
    if (loan == null) { 
     transactionStatus.setRollbackOnly() 
     notFound() 
     return 
    } 

    if (loan.hasErrors()) { 
     transactionStatus.setRollbackOnly() 
     respond loan.errors, view:'create' 
     return 
    } 

    loan.save flush:true 

    request.withFormat { 
     form multipartForm { 
      flash.message = message(code: 'default.created.message', args: [message(code: 'loan.label', default: 'Loan'), loan.id]) 
      redirect loan 
     } 
     '*' { respond loan, [status: CREATED] } 
    } 
} 

编辑2 代码改变到后:

   <f:field bean="loan" property="bank" > 
        <g:select name="bank" from="${banks}" value="{banks?.id}" /> 
       </f:field> 

空指针已被固定,但我现在有一个类型不匹配的错误。任何人都知道我如何解决这个问题?

在此先感谢。

回答

1

您需要将选定的“银行ID”绑定到“银行”。ID”通过name属性,使用option键选择并固定值选项:。

<f:field bean="loan" property="bank" > 
    <g:select class="form-control" id="bank" name="bank.id" from="${banks}" optionKey="id" optionValue="companyName" value="${loan.bank.id}"/> 
</f:field> 
+0

感谢您的帮助。错误将变为: 类[class test.Company]的属性[类别]不能为空 [class test.Company]类的属性[companyName]不能为空 可能出现了什么问题? –

+0

这是我的