2013-09-23 1 views
1

JSR-303 bean 유효성 검사를 사용하려고합니다. @Pattern의 사용자 지정 메시지가 Double 속성에 표시되지 않음

은 내가 /WEB-INF/classesValidationMessages_es.propertiesValidationMessages_en.properties을 넣어 받는다는 의존성

<dependency> 
    <groupId>javax.validation</groupId> 
    <artifactId>validation-api</artifactId> 
    <version>1.1.0.Final</version> 
</dependency> 

을 추가했다.

는 모델 :

@Pattern(regexp="[0-9]", message="{not.a.valid.number}") 
private Double price; 

그리고 이것은이다 :

form:price: 'ss' is not a number. Example: 99 

: 나는 발리에서이 메시지가 잘못된 번호를 넣어

<p:inputText id="price" 
    value="#{inventoryMB.product.price}"> 
    <f:convertNumber type="number" maxFractionDigits="0" /> 
</p:inputText> 
<p:message for="price" /> 

속성의 사용자 지정 메시지가 작동하지 않습니다. 뭐가 잘못 되었 니?

답변

5

당신은 몇 가지 개념을 섞어서 정확히 무엇이 원하는지 명확하지 않으므로 정답을 제시하기가 어렵습니다.

우선 @PatternString 속성에서만 작동합니다. [0-9] 만 허용하려는 경우 Double 대신 Integer 또는 Long을 사용하십시오. 필요한 경우 0보다 낮추지 않으려면 @Min을 사용하십시오. 이렇게하면 전체 <f:convertNumber>도 제거 할 수 있습니다. 그러나 이렇게하면 JSR 303에 의해 숫자로 유효성을 검사 할 수 없습니다. 구문 적으로 유효하지 않은 숫자로 속성을 설정하는 것은 불가능한 Java의 강력한 유형화 된 특성 덕분입니다. 당신이 직면하는 변환 오류는 Double, Long 및 친구들과 같이 java.lang.Number 속성이 사용되었을 때 암시 적으로 이미 기본 설정으로 사용 된 JSF의 <f:convertNumber>에서 실제로 온 것입니다.

가장 좋은 방법은 JSF 측에서 변환 오류 메시지를 지정하는 것입니다.

<p:inputText ... converterMessage="#{bundle['not.a.valid.number']}" /> 

또는이 키 <message-bundle>를 통해 JSF 기본 변환 오류 메시지가 오버라이드 (override) : 당신이 정말 할 수 있어야하는 경우

javax.faces.converter.NumberConverter.NUMBER_detail={2}: ''{0}'' is not a number. Example: {1}

당신은 입력 필드 중 하나를 지정 converterMessage 속성으로 할 수있다 JSR303 bean validation의 @Pattern으로 유효성을 검사 한 다음, 속성을 String으로 선언하십시오. 그러나 이것은 Java의 강력한 유형화 된 속성을 완전히 무효화합니다.

+0

DB의 필드가 double로 저장되므로 이중 값을 사용합니다. Doubles 또는 Integer의 유효성을 검사하는 더 좋은 방법이 있습니까? 예를 들어, omnifaces로? –

+1

가장 좋은 건 사용자 정의 JSF 변환기입니다. 구문 분석 및 이중으로 반환하기 전에 문자열 값에 대한 패턴의 유효성을 검사 할 수 있습니다. OmniFaces는 이에 대한 내장 기능을 제공하지 않습니다. – BalusC

+0

전에 비슷한 질문에 답했습니다 : http://stackoverflow.com/questions/14848675/need-fconvertnumber-to-throw-error/ – BalusC