下面是型号:如何自定义默认消息的BigDecimal
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中”所需类型“的java.math.BigDecimal”的属性“记录[0] .trackingNumber”转换;嵌套异常是java.lang.NumberFormatException
未能将类型'java.lang.String'的属性值转换为属性'trackingNumber'所需的类型'java.math.BigDecimal';嵌套的例外是java.lang.NumberFormatException
其他
一个潜在的并发症是我没有使用弹簧形式,因为我试图做一些Ajax提交。这就是我如何提交数据:
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页面上使用的表单对象的类名或名称?
添加额外信息。在这两个属性文件中,我有'formData.trackingNumber =无效的格式'。但我仍然收到默认错误'无法转换类型...'的属性值 – user1766760 2013-02-27 16:20:52