モデルは次のとおりです。
public class myFormData {
private BigDecimal trackingNumber;
@Valid
private List<myCustomRecord> records = new ArrayList<myCustomRecord>();
}
public class myCustomRecord {
//the field also appears here (for child records)
private BigDecimal trackingNumber;
}
ある時点でこのオブジェクトを受け取って保存するコントローラーメソッドがあります。
public @ResponseBody ValidationResponse save(Model model,
@Valid myFormData formData, BindingResult result,
HttpSession session){
//do stuff
}
私が抱えている問題は、文字列がtrackingNumber
フィールドに渡された場合、エラーメッセージが良くないことです。
タイプ「java.lang.String」のプロパティ値を、プロパティ「records[0].trackingNumber」に必要なタイプ「java.math.BigDecimal」に変換できませんでした。ネストされた例外は java.lang.NumberFormatException です
タイプ「java.lang.String」のプロパティ値を、プロパティ「trackingNumber」に必要なタイプ「java.math.BigDecimal」に変換できませんでした。ネストされた例外は java.lang.NumberFormatException です
もう 1 つの潜在的な問題は、いくつかの ajax 送信を行おうとしているために、Spring フォームを使用していないことです。これは私がデータを提出する方法です:
function collectFormData(fields) {
var data = {};
//myFormData
data["trackingNumber"] = <<some value here>>;
for (var i = 0; i < fields.length; i++) {
data["records["+i+"].trackingNumber"] = <<some value>>;
//some more data to submit for child records
}
return data;
}
var mData = collectFormData(aSelectedRows);
if (aSelectedRows.length> 0) {
$.post('call_controller_save', mData, function(response) {
if (response.status === 'FAIL') {
displayError(response);
} else {
//SAVE SUCCESSFUL
$('#successMsgs').append("Data Saved");
}, 'json');
}
trackingNumber
のデータ型を に変更String
して、カスタムを作成してみましたConstraintValidator<CheckNumeric, String>
。それはうまくいきます... を介してカスタムメッセージを入れることができますがValidationMessages.properties
、モデルを意図したデータ型に忠実に保ちたいと思います。 エラー メッセージを制御し、ユーザー フレンドリーなメッセージに変更する別の方法はありますか?
(また、検証ステップの前に、データバインディングで最も可能性が高いことも理解していNumberFormatException
ますか?しかし、デフォルトメッセージを修正する方法はまだわかりません)
編集 次の構成を使用します
<bean class="org.springframework.context.support.ResourceBundleMessageSource"
id="messageSource">
<property name="basenames">
<list>
<value>messages</value>
<value>ValidationMessages</value>
</list>
</property>
</bean>
各プロパティ ファイルには、同じ内容が含まれています。
formData.trackingNumber=Invalid format
しかし、カスタム メッセージはまだ取得されていません。 質問 2 :formData
または? myFormData
クラス名なのか、jsp ページで使用されているフォーム オブジェクトの名前なのか混乱しています。