2012-06-28 3 views
5

십진수 변환을 위해 <f:convertNumber> 태그를 사용하고 있습니다.f : convertNumber가 십진법의 후행 알파벳 문자에 변환 오류를 발생시키지 않습니다.

<f:convertNumber minFractionDigits="2" /> 

하지만 영문자는 허용됩니다. 예를 들어 12345.1234AAA을 입력하면 12345.123으로 변환됩니다. 알파벳 문자를 자르지 않고 변환 오류를 발생시키고 싶습니다. 이것을 어떻게 할 수 있습니까?

답변

3

이것은 단순히 <f:convertNumber>에 의해 사용되는 java.text.NumberFormatstandard behavior : 그것은 트림 처음하지-허용 문자 이후의 모든 항목 (예를 들어, 입력 로케일에 정의 된 것보다 문자 또는 10 진수 분리기 등). 문제가있는 문자가 처음에있는 경우에만 변환이 실패합니다.

의도하지 않은 (심지어 더 나쁜) 주목할만한 자동 수정이 잘못된 값으로 바뀌어 사용자가 실수로 잘못 입력 한 값을 알아 채지 못할 수 있기 때문에이 동작이 마음에 들지 않습니다.

흥미롭게도 특정 숫자 변환기는 다르게 동작합니다. <f:converter converterId="javax.faces.Double" />을 사용하면 숫자가 아닌 입력을 자동으로 처리하지는 않지만 대신 변환하지 못합니다. 그러나 태그에는 minFractionDigits 또는 통화 기호와 같은 convertNumber의 추가 속성이 없습니다.

다른 방법은 in this answer과 같이 표준 변환기를 확장하는 사용자 지정 변환기를 작성하는 것입니다. 그런 다음 문자 값을 확인하고 추가 처리를 직접 중단 할 수 있습니다 (변환 예외가 발생하는 경우). 값에 이미 문자가없는 경우 파생 된 변환기의 표준 동작을 호출 할 수 있습니다.

두 가지 단점은 convertNumber의 추가 기능을 잃어 버리는 것입니다. minFractionDigits 또는 currencySymbol과 같은 속성이 <f:converter>에 없으므로 필요하면 매개 변수를 전달하는 다른 방법을 찾아야합니다. 우리의 구현에는 이들 중 어느 것도 필요하지 않으므로 더 이상이 내용을 살펴 보지 않았습니다 (접근 방식 A로갔습니다). this answer은 접근 방식을 제시합니다.

관련 문제