2013-02-27 103 views
2

下面是型号:如何自定义默认消息的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页面上使用的表单对象的类名或名称?

回答

0

我不认为在这种情况下有一种方法来控制验证错误消息,因为它发生在调用validate()之前。

我们可以做的事情是,

  1. 定义validationError.properties
  2. 有像
    formData.trackingNumber =无效的格式

  3. 自定义错误消息定义组织一个Spring bean。 springframework.context.support。ResourceBundleMessageSource会类号码:基本名称为validationError

+0

添加额外信息。在这两个属性文件中,我有'formData.trackingNumber =无效的格式'。但我仍然收到默认错误'无法转换类型...'的属性值 – user1766760 2013-02-27 16:20:52

4

添加到验证消息 - 这种格式是默认使用的春天,如果它不能从提供的文本转换为数字:以上

typeMismatch.java.math.BigDecimal=Required format is number.