java - JSF에서 viewstate는 무엇이며 어떻게 사용됩니까?





richfaces myfaces (3)


자바 스크립트에 익숙하다면 JSF 컴포넌트 트리를 HTML DOM과 같이 생각할 수 있습니다. HTML 페이지는 초기 상태를 정의하지만 런타임에 변경할 수 있습니다.

뷰 기술 (보통 JSP 또는 Facelets)은 초기 상태를 정의하지만 이후에는 프로그래밍 방식으로 조작 할 수 있습니다. 예를 들어 component 추가하거나 property 설정할 수 property . 이 기능이 제대로 작동하려면보기 상태가 요청간에 지속되어야합니다.

뷰 상태는 두 부분으로 나뉩니다. 첫 번째 요소는 구성 요소 트리의 구조를 정의합니다.

UIView
 - UIForm
    - UICommand
    - UIInput

두 번째 부분은 구성 요소의 상태를 정의합니다. 이것들은 UIData와 같은 구성 요소들로 인해 분리되어 있습니다. UIData는 자식들이 (예를 들어) 행 상태 당 가질 수 있습니다. 이것은 StateHolder 기구를 사용해 정렬 화 / 비 정렬 화됩니다.

JSF에는 각 페이지와 연관된 viewstate가 있으며, 제출물과 함께 앞뒤로 전달됩니다.

Viewstate는 페이지의 다양한 컨트롤의 상태를 사용하여 계산되며 클라이언트 측 또는 서버 측 중 하나에 저장할 수 있다는 것을 알고 있습니다.

질문 :이 값은 어떻게 사용됩니까? 동일한 요청이 두 번 전송되지 않도록 제출시 전송 된 값을 확인하는 데 사용됩니까?

또한 계산 방법은 무엇입니까? 부유 한면을 myface와 다르게 계산할 수도 있지만 아이디어가 좋을 것입니다.

감사.




질문 :이 값은 어떻게 사용됩니까? 동일한 요청이 두 번 전송되지 않도록 제출시 전송 된 값을 확인하는 데 사용됩니까?

viewstate가 존재하는 원래의 이유는 HTTP가 stateless이기 때문입니다. 요청에 대한 구성 요소의 상태는 한 가지 방법으로 유지되어야합니다. 서버의 메모리에 상태를 저장하고 세션에 바인딩하거나 요청 / 응답에서 매번 serialize / deserialize합니다.

AFAIK, viewstate는 이중 제출을 감지하는 데 사용되지 않지만 타임 스탬프 또는 이와 유사한 태그를 첨부하면 가능합니다.

viewstate를 암호화하여 클라이언트가 변경하지 않도록 할 수도 있습니다.

또한 계산 방법은 무엇입니까? 부유 한면을 myface와 다르게 계산할 수도 있지만 아이디어가 좋을 것입니다.

각 구성 요소는 saveStaterestoreState 상태를 유지할 책임이 있습니다 (이 tutorial 참조). 따라서 서로 다른 컴포넌트 스위트가 서로 다른 뷰 상태가됩니다. 마찬가지로 다른 JSF 구현은 다른 뷰 상태가 될 수 있습니다.




String 값을 정수 값으로 변환하기 위해 Integer 래퍼 클래스의 parseInt(String str) 메서드를 사용할 수 있습니다.

예 :

String strValue = "12345";
Integer intValue = Integer.parseInt(strVal);

Integer 클래스는 valueOf(String str) 메서드도 제공합니다.

String strValue = "12345";
Integer intValue = Integer.valueOf(strValue);

또한 변환을 위해 NumberUtils 유틸리티 클래스toInt(String strValue) 를 사용할 수 있습니다.

String strValue = "12345";
Integer intValue = NumberUtils.toInt(strValue);






java jsf richfaces myfaces