我正在开发一个使用记录贷款的grails的简单应用程序。有三个简单的域类:类型不匹配错误使用g:与域对象一起选择
- CompanyCategory - 两种基本类型类别,“银行” &“其他”
- 公司 - 所有这些都在系统的公司。
- 贷款 - 记录我们从哪家银行借钱,以及多少钱。
以下是简单的域类:
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>
空指针已被固定,但我现在有一个类型不匹配的错误。任何人都知道我如何解决这个问题?
在此先感谢。
感谢您的帮助。错误将变为: 类[class test.Company]的属性[类别]不能为空 [class test.Company]类的属性[companyName]不能为空 可能出现了什么问题? –
这是我的
非常感谢!这完全奏效!我在最终版本中做了一些小改动,效果非常好。再一次感谢你@bassmartin! –