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 필드에 전달되는 경우, 오류 메시지가 좋지 않아입니다.

속성 'records [0] .trackingNumber'에 대해 'java.lang.String'형식의 속성 값을 필수 형식 'java.math.BigDecimal'로 변환하지 못했습니다. 중첩 예외가 java.lang.NumberFormatException 인 경우

'java.lang.String'유형의 속성 값을 'trackingNumber'속성의 필수 유형 'java.math.BigDecimal'로 변환하는 데 실패했습니다. 중첩 예외는 java.lang.NumberFormatException입니다.

다른 잠재적 인 합병증은 일부 Ajax 제출을 시도하기 때문에 Spring 양식을 사용하지 않습니다. 내가 String-trackingNumber의 데이터 유형을 변경 시도하고 사용자 정의 ConstraintValidator<CheckNumeric, String>을 쓴 적이

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'); 
} 

: 이것은 내가 데이터를 제출하고있어 방법이다. 그 트릭을 ... 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'이 있습니다. 하지만 여전히 기본 오류'유형의 속성 값을 변환하지 못했습니다. '가 표시됩니다. – user1766760

4

등의 기본 이름은 확인 메시지에 추가 - 그것은 숫자에 공급 텍스트로 변환 할 수없는 경우 형식의이 종류는 봄에서 기본적으로 사용됩니다

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