2013-07-21 1 views
5

required="true"으로 표시되고 서버 측에 사용자 정의 Validator을 갖는 입력 텍스트 구성 요소가있는 페이지가 있습니다.클라이언트에서 입력이 제거되면 유효성 검사기를 건너 뛰었습니다 - JSF 사양대로입니까?

이제 클라이언트로, 해당 구성 요소가 렌더링 한 HTML 요소없이 페이지를 제출합니다 (브라우저의 내장 DOM 요소 검사기를 사용하여 DOM 트리에서 요소를 제거하면 쉽게 구현할 수 있습니다). 이 필수 구성 요소의 서버 측 유효성 검사없이 양식이 성공적으로 제출됩니다.

JSF 사양대로입니까? 게시 된 페이지에 포함되지 않은 경우에도 페이지의 유효성 검사기가 실행되도록 지정하는 방법이 있습니까?

답변

4

이것은 사양에 따른 것입니다. 다음은 관련성을 추출한 결과입니다. UIInput#validate() javadoc :

제출 된 값을 getSubmittedValue()으로 가져옵니다. null을 반환하는 경우 추가 처리없이없이 이 종료됩니다. 이 값은이 구성 요소에 대해 제출 된 값이 없음을 나타냅니다.

빈 입력은 null이 아닌 빈 문자열을 전송합니다. 입력이 없으면 빈 문자열이 아닌 null을 전송합니다.

유해한지 여부는 비즈니스 논리에 따라 다릅니다. null을 예상대로 고려하지 않은 잘 설계된 모델 (비즈니스 논리 및/또는 데이터 모델)은 다른 곳에서 널 포인터 예외 또는 SQL 제약 조건 위반 (NOT NULL)을 발생 시키며, 이는 일반적으로 HTTP 500 오류 응답으로 끝납니다 . 그러나 모델이 실제로 null을 예상 된 케이스로 간주하면 모델에 결함이있는 것 같습니다. 모델을 제시하기 위해 의도 된 뷰 (JSF 페이지)는 그다지 반대하지 않을 수 있습니다. 비즈니스 로직이나 데이터 모델이 정말 예외적 인 경우로 null을 고려 변경 될 수없는 경우

(즉 null로 주어진 값을 수락/가정하지 않음), 당신은 JPA를 사용하는 일이, 당신의 가장 좋은 방법은 추가하는 것입니다 a @NotNull 속성에. JSF가 유효성 검사를 무시하는 동안 JPA는 여전히 유효성 검사를 수행하므로 예외 및 HTTP 500 오류가 발생합니다. 이 경우 DB 열에 NOT NULL 제약 조건이없는 이유가 궁금합니다. 또는 class level validation을 수행하십시오. 에서 MyFaces이에 다음과 같은 경고를 로그온 할 수 있어야 저명한

:

2016년 3월 16일 오전 8시 55분 52초 org.apache.myfaces.shared.renderkit.html.HtmlRendererUtils decodeUIInput
경고 : 입력이 렌더링되고 그 양식이 제출되고 원래는 사용 불가능하게되거나 읽기 전용으로 렌더링되지 않은 경우 제출 된 값이 항상 있어야합니다. javascript를 통해 입력 요소를 사용 중지 한 후 양식을 제출할 수 없습니다. 대신 폼을 제출하기 전에 읽기 전용을 true로 설정하거나 비활성화 된 값을 false로 다시 설정하십시오.
구성 요소 : {구성 요소 경로 : [클래스 : javax.faces.component.UIViewRoot, ViewId : /test.xhtml] 클래스 : javax.faces.component.html.HtmlBody, ID : j_id_5] 클래스 : javax.faces .component.html.HtmlForm, Id : j_id_6] [클래스 : javax.faces.component.html.HtmlInputText, Id : j_id_7] 위치 : 22 행 33 열의 /test.xhtml}

+0

javadoc 추출물은 동작을 매우 명확하게 설명합니다.위에서 언급했듯이 비즈니스 로직에 따라 다르지만 null 포인터 예외가 발생하기 전에 응용 프로그램 범위 개체를 부분적으로 업데이트하여 응용 프로그램 전체가 손상 될 수 있습니다. 질문의 두 번째 부분도 대답 해주십시오. 입력이 null 인 경우에도 유효성 검사를 수행 할 수 있습니까? – mittal

+0

JSF 해킹없이. OmniFaces를 사용하는 경우 가장 좋은 방법은 클래스 레벨 빈 검증을 지원하는' '을 통해 BV (JSR303 Bean 유효성 검사,'@ NotNull' 및 친구들)를 강제하는 것입니다. – BalusC

관련 문제