2017-09-06 3 views
0

私はローンを記録するgrailsを使って簡単なアプリケーションを開発しています。 - 基本的にカテゴリの2種類、「銀行」&「その他」 タイプミスマッチエラーg:ドメインオブジェクトで選択

  • 会社 - システム内にあるすべての企業

    1. CompanyCategory:そして、3つの簡単なドメインクラスがあります。
    2. ローン - どの銀行から借りているか、どのくらいの金額を記録していますか?

    次のような単純なドメインクラスです:

    class CompanyCategory { 
    
        String categoryName 
    
    } 
    
    class Company { 
    
        String    companyName 
        CompanyCategory  category 
    
    } 
    
    class Loan { 
    
        Company  bank 
        BigDecimal loanAmount 
    
    } 
    

    私のコントローラから、私は銀行のタイプであるすべての企業を発見した、とのような、私のGSPに渡し:

    私の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] 
    } 
    

    、これはそれがどのように見えるかです:

     <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]私が間違って何をしました

    nullにすることはできませんか?それとももっと良い方法がありますか?

    ありがとうございます。

    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] } 
        } 
    } 
    

    EDIT 2 を保存ある:NULLポインタが修正されてい

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

    、しかし私は今タイプのミスマッチエラーがあります。誰でも私はこれを修正する方法を知っていますか?

    ありがとうございます。

  • 答えて

    1

    選択した「銀行ID」を「銀行」にバインドする必要があります。name属性を経由してID」には、オプションキーオプションを使用して、値のオプション修正:!。。

    <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

    助けていただきありがとうございます。 プロパティ[クラスtest.Company]のカテゴリはnullにできません クラス[クラスtest.Company]のプロパティ[companyName]はnullにはできません 何が間違っていた可能性がありますか? –

    +0

    ここに私の