モデルの列挙型からオプション リストをレンダリングするために、dijit コンポーネントで Spring を使用しています。
<form:select path="selection">
<form:option value="" label="Please select"></form:option>
<form:options></form:options>
</form:select>
<noscript>
<button id="btnSelect" type="submit" name="_eventId_dropDownSelectionChange">Select</button>
</noscript>
<script type="text/javascript">
Spring.addDecoration(new Spring.ElementDecoration({
elementId : "selection",
widgetType : "dijit.form.Select",
widgetAttrs : {
forceWidth : true,
missingMessage : "<s:message code="NotEmpty" />"
}
}));
Spring.addDecoration(new Spring.AjaxEventDecoration({
elementId : "selection",
formId : "templateModel",
event : "onChange",
params : { _eventId: "dropDownSelectionChange" }
}));
</script>
Javascript がオフの場合、btnSelect からのポストは、選択されたアイテムをサーバー側の列挙型に正常に変換します。つまり、私の変換サービスは次のメッセージを表示します。
DEBUG: org.springframework.binding.mapping.impl.DefaultMapping - Adding mapping result [Success@15fddb33 mapping = parameter:'selection' -> selection, code = 'success', error = false, originalValue = 'IPSUM', mappedValue = 'IPSUM']
ただし、Javascript がオンで、投稿が XHR を超えると、enum 変換が失敗します。このメッセージを表示する変換サービス:
DEBUG: org.springframework.binding.mapping.impl.DefaultMapping - Adding mapping result [TargetAccessError@7b7d8769 mapping = parameter:'selection' -> selection, code = 'typeMismatch', error = true, errorCause = org.springframework.binding.expression.ValueCoercionException: Value could not be converted to target class; is a suitable type converter registered?, originalValue = 'selection', mappedValue = [null]]
両方が同じ変換サービスを使用している場合、なぜこれが起こっているのかわかりません。AJAX 呼び出しが列挙型にバインドできるように、特別な構成をセットアップする必要がありますか?