2011-03-09 3 views
3

JSF 트리에서 컴포넌트를 찾는 데 문제가 있습니다.JSF 트리의 a4j : repeat 태그에서 중첩 된 n 번째 컴포넌트 찾기

xmlns:a4j="http://richfaces.org/a4j" 
xmlns:h="http://java.sun.com/jsf/html" 
xmlns:s="http://jboss.com/products/seam/taglib" 

당신이 볼 수 있듯이이하는 a4j:repeat 태그가, 그래서 페이지 N 렌더링 선택 입력이있을 수 있습니다

<a4j:form id="someForm"> 
<a4j:outputPanel id="somePanel"> 
    <a4j:repeat id="people" value="#{bean.people}" rowKeyVar="_row" var="_data" stateVar="_state"> 
     <s:decorate id="personPanel" template="edit.xhtml"> 

      <h:outputLabel for="personAge" value="Choose your age:" /> 

      <h:selectOneMenu id="personAge" value="#{_data.age}"> 
       <s:selectItems var="_item" value="#{ageValues}" label="#{_item.description}" /> 
      </h:selectOneMenu> 

     </s:decorate> 
    </a4j:repeat> 
</a4j:outputPanel> 
</a4j:form> 

네임 스페이스는 다음과 같이 정의된다 : 나는 다음과 같은 템플릿이 있다고 가정 . 서버 측의 JSF 트리에서 n 번째 컴포넌트를 어떻게 찾을 수 있습니까? 클라이언트 측에서 구성 요소는 someForm:somePanel:0:personPanel:personAge과 같이 렌더링됩니다. 이 방법으로 구성 요소를 찾으려고합니다.

UIViewRoot root = FacesContext.getCurrentInstance().getViewRoot(); 
UIInput ageInput = (UIInput) root.findComponent("someForm:somePanel:0:personPanel:personAge"); 

그러나 찾을 수 없습니다. 나는 나무를 확인했는데, 그 id를 가진 구성 요소가 존재하지 않는 것 같습니다.

어떻게하면이 구성 요소를 얻을 수 있습니까? 그것을 달성 할 수있는 방법이 있습니까?


편집 :

나는 몇 가지 해결 방법을 찾았습니다. 사실, 저는 구성 요소가 필요 없지만 그들의 가치는 있습니다. 값은 요청에 따라 이름별로 검색 할 수 있습니다. 다음 코드 :

FacesContext facesContext = FacesContext.getCurrentInstance(); 
String ageValue = facesContext.getExternalContext().getRequestParameterMap().get("someForm:somePanel:0:personPanel:personAge"); 

작업을 수행했습니다.

+0

어떤 태그 라이브러리 (XML 네임 스페이스)를 'a :'로 매핑 했습니까? – meriton

+0

게시물을 업데이트했습니다. xmlns : a = "http://richfaces.org/a4j –

답변

3

a4j : repeat는 각 반복마다 전용 구성 요소를 만드는 태그 처리기가 아닙니다. 오히려 JSF 라이프 사이클의 각 단계에서 반복적으로 하위 컴포넌트를 방문하게한다. 즉, 각 행에 전용 구성 요소가 없습니다.

태그 핸들러와 구성 요소 사이의 차이에 대한 자세한 내용 : http://www.ilikespam.com/blog/c:foreach-vs-ui:repeat-in-facelets

보통 자바 측 이름 요소를 참조하기위한 회피 할 수있다. 왜 그렇게했는지 말하면 대안을 제안 할 수 있습니다.

편집 : JSF의 검증은 일반적으로 백업 빈의 데이터에 직접 작업을 수동으로 FacesContext에 FacesMessage으로 바꾸어 액션 메소드의 검사기 또는 (복잡한 경우에) 이루어집니다. 왜 검증을 위해 컴포넌트가 필요한지 모르겠습니다.

+0

유효성 검사를 위해 서버 측에서 이러한 구성 요소를 찾아야합니다. 그 이유에 대해 묻지 마십시오. 그냥 어떤 식 으로든 찾아야합니다. 알레 네이트가 보이니? –