2013-02-27 2 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»; inested exception is java.lang.NumberFormatException

Не удалось преобразовать значение свойства типа «java.lang.String» в требуемый тип «java.math.BigDecimal» для свойства «trackingNumber»; вложенное исключение - java.lang.NumberFormatException

Еще одно потенциальное осложнение: я не использую форму Spring, так как я пытаюсь выполнить некоторые представления 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 «s типа данных 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. Определения пружинного компонента для орга. springframework.context.support.ResourceBundleMessageSource класс с р: базовое, как ValidationError

+0

Добавлена ​​дополнительная информация выше , В обоих файлах свойств у меня есть 'formData.trackingNumber = Invalid format'. Но я все еще получаю ошибку по умолчанию 'Не удалось преобразовать значение свойства type ...' – user1766760

4

Добавить в сообщениях проверки - это своего рода формат используется по умолчанию, весной, если он не может конвертировать из прилагаемого текста на номер:

typeMismatch.java.math.BigDecimal=Required format is number. 
Смежные вопросы