hasMany
データバインディングを使用してフォームを介して関係を更新しようとしていますが、取得したデータparams
が正しくないようです。
ドメインクラス:
class CustomerSite {
static hasMany = [dhrs:DeviceHistoryRecord];
static mapping = {
id generator:'sequence', params:[sequence:'cs_seq']
}
...
}
ビューの編集:
...
<g:select name="dhrs" id="dhrs"
from="${DeviceHistoryRecord.list()}"
multiple="multiple"
optionKey="id"
value="${customerSiteInstance?.dhrs}"/>
コントローラ:
def update = {
def customerSiteInstance = CustomerSite.get( params.id )
if(customerSiteInstance) {
customerSiteInstance.properties = params
String flashMsg = new String();
flash.message = "";
if(!customerSiteInstance.hasErrors() && customerSiteInstance.save()) {
flash.message += "Customer Site ${customerSiteInstance.toString()} updated"
redirect(action:show,id:customerSiteInstance.id)
}
else {
flash.message = flashMsg
render(view:'edit',model:[customerSiteInstance:customerSiteInstance])
}
}
else {
flash.message = "Customer Site not found with id ${params.id}"
redirect(action:edit,id:params.id)
}
}
これは私にエラーを与えます:
エラー200:org.springframework.beans.NotReadablePropertyException:Beanクラス[java.lang.String]の無効なプロパティ'currentDeviceData':Beanプロパティ'currentDeviceData'が読み取れないか、無効なgetterメソッドがあります:getterの戻り型が一致していますかセッターのパラメータータイプ?
コントローラコードのこの行で:
if(!customerSiteInstance.hasErrors() && customerSiteInstance.save()) {
それは私には意味がありませんが、私はそれを(実際にはたくさん)だまして、最終的にg:select
はインデックスのコレクションをparamsに渡していることに気づきました。
ビューは、私が正しいと思うコードを出力します。
<select name="dhrs" id="dhrs" multiple="multiple" >
<option value="2421" >801122</option>
<option value="2422" >801123</option>
...
リストのインデックス0とインデックス1のアイテムを選択した場合、期待どおりに「2421」と「2422」のセットが渡されません。「0」と「1」を渡します。さらに悪いことに、それを実行した後、編集ページに戻ってもう一度実行すると、今度はインデックス8で何かを選択すると、「8」が表示されますが、「0」と「1」も表示されます。 「前回から。
ここを少し見てみると、selectタグから複数の値を選択していることがわかりました-Grails。これには、次のような変更を加えるなど、他のアイデアがいくつかあります。
<g:select name="dhrs.id"
from="${DeviceHistoryRecord.list()}"
multiple="multiple"
optionKey="id"
value="${customerSiteInstance?.dhrs*.id}"/>
しかし、実際の値が返される代わりにインデックスが返される問題は修正されましたが、メソッドエラーがありませんでした。
ここで何が起こっているのか、どうすれば修正できるのかについてのアイデアはありますか?
ところで、私はGrailsのバージョン1.0.4を実行しています。はい、アップグレードしたいのですが、できません。
ありがとう!