2014-12-22 4 views
3

시각적 구성 요소 안에 중첩 된 ajax 태그로 호출되는 메서드가 내 JSFcontroller입니다 (실제로는 어느 것과도 관계가 없습니다). 이 메소드는 AjaxBehaviorEvent 유형의 단일 인수를 사용하여 호출하는 HTML 시각적 구성 요소의 Java 표현을 UIComponent으로 가져올 수 있으며 특정 유형 (예 : h:inputText에 해당하는 HtmlInputText)으로 다운 캐스팅 할 수 있습니다.Java에서 UIComponent 값을 가져 오는 방법은 무엇입니까?

대부분의 경우 HTML 비주얼 컴포넌트의 값은 뷰에서 폼 필드가 매핑되는 컨트롤러 또는 엔티티 [g | s] etters를 참조하여 쉽게 검색된다는 것을 알고 있습니다. 그러나 필자의 경우 Java 객체 렌더링을 통해 시각적 구성 요소 (내 경우에는 양식 필드)의 값을 가져오고 싶습니다. faces API를 연구하는 동안 ID 또는 context과 같이 개체의 다양한 속성을 읽을 수 있지만 구성 요소가 현재보기에 보유하고있는 값은 아닙니다.

아무도 내가 그것을 읽는 올바른 방법을 찾지 못했다는 것을 설명 할 수 있습니까? 후자의 경우 왜 그렇게 설계되었는지 설명 할 수 있습니까? 보기 매핑을 거치지 않고 양식 필드에 "백도어"액세스를 사용하지 않도록 설정합니까?

답변

4

구성 요소에서 값을 가져 오는 데는 여러 가지 방법이 있습니다. 이미 UIInputt#getValue()UIInput#getSubmittedValue()이있는 것으로 이동하면 값이 제공됩니다.

UIInput#getSubmittedValue()은 JSF 요청의 APPLY_REQUEST_VALUESVALIDATE 단계 사이에만 적합합니다. 이후 다른 모든 단계는 UIInputt#getValue()을 사용하십시오. 이벤트에서 가져온 UIComponent (UIInputUIComponent까지 확장되며 사용자가 편집 한 값을 허용하는 모든 입력 구성 요소의 부모 클래스입니다.

 UIInput theInput = (UIInput)event.getSource(); 
    Object theValue = theInput.getValue(); 

+0

환상적인 요청 라이프 사이클 내에서 값을 얻을 수있는 다른 방법 (깨끗하지 않음)이 있습니다 : 당신은 무엇을해야하는 것은 결국처럼 보일 것입니다. 'UIInput.getValue()'가'String'이 아닌'Object'를 반환하기 때문에 약간의 변경이있었습니다. 그 밖의 모든 것은 훌륭합니다. 감사 – amphibient

관련 문제