2014-07-18 4 views
0

안녕하세요 PrimeFaces 새로운 그리고 난 예를 들어액세스

<p:panelGroup id="container"> 
    <h:form id="form1"> 
     <div id="div1"> 
     ... 
     ... 
    </h:form> 
<p:commandButton action="#{bean.action}" value="update div1" /> 
    ... 

그래서 어떻게의 내용을 업데이트 할 수 있습니다에서 같은 ID로 참조하는 많은 요소를 포함하는 JSF 페이지가 div1 또는 해당 ID로 compenent에 액세스하려면 어떻게해야합니까?

일반적으로 나는 다음과 같은 것이 있다고 생각합니다 : update=":container:form1:div1"하지만 그것은 저에게 효과적이지 않습니다.

답변

2

JSF는 구성 요소 기반 프레임 워크이며 PrimeFaces는 JSF 위에있는 구성 요소 라이브러리로서 표준 JSF 구성 요소 위에 다양한 구성 요소를 제공하기위한 것입니다. 두 가지 모두에는 많은 구성 요소가 있습니다. 예를 들어, PrimeFaces의 <p:panelGroup>과 JSF의 <h:form>이 질문에 언급되어 있습니다. 모든 구성 요소에는 id="component-id"을 통해 사전 설정되거나 id 속성이 생략 된 경우 자동 생성됩니다.

UIViewRoot으로 시작하는 JSF 수명주기 구성 요소 트리가 생성되는 동안 구성 요소의 중첩 구조가 존재합니다. Facelets를 사용하여 (가장 일반적으로) 컴포넌트 구조를 선언하는 것처럼 Facelet의 컨텐츠는 컴포넌트 트리에서 해당 위치를 가져옵니다. 즉, 참조 된 모든 태그 (예 : <p:commandButton> 등)는 JSF 구성 요소 트리 내에서 결국 UIComponent 인스턴스가됩니다.

파일이 XHTML 파일의 모든 제한 사항을 준수하는 경우 모든 잔여 태그 (HTML <div> 등)는 일반 텍스트로 해석됩니다. JSF가 응답을 렌더링하자마자 일반 텍스트는 변경없이 그대로 응답에 작성됩니다. JSF는 결국 HTML 코드 생성기에 있습니다. 또한 고유 한 ID를 가진 JSF 구성 요소와 달리 구성 요소 트리에 해당 인스턴스가 없습니다.

JSF 컴포넌트의 id 속성과 응답에 렌더링되는 clientId 속성의 차이점에 대해서도 유의할 가치가 있습니다. 더 자세한 정보는 그 아이들의 앞에 id가 붙는 UINamingContainer을 읽어라.

다음으로 구성 요소의 내용은 AJAX를 통해 (다시) 렌더링 될 수 있습니다. 이를 위해서는 <p:commandButton>update 속성에 렌더링 될 구성 요소의 ID를 전달해야합니다. 렌더링 된 구성 요소가 ID를 통해 어떻게 발견되는지는 약간의 차이가 있으며, 이는 구성 요소 라이브러리마다 다를 수 있습니다. 기본 JSF 규칙은 고전을 읽습니다 : Communication in JSF 2.0 파악을 얻으십시오.

궁극적으로 언급에서 당신이 방법을 고안 할 수 있습니다

  1. 당신이 순수 JSF 구성 요소에 HTML 요소에서 무언가 스위치를 다시 쓰게하려는 경우 귀하의 경우 <h:panelGroup id="renderme"> 같은 컨테이너로 작동 것이라고 그 것이다 또한 <div>으로 렌더링됩니다. 이 구성 요소는 처음에 다시 렌더링하려는 블록을 래핑 할 수 있습니다. 이제 JSF는 컴포넌트를 찾아 다시 렌더링 할 수 있습니다.
  2. 명령 단추의 update 특성에있는 update=":container:form1:renderme"에있는 rerendered 구성 요소에 right id을 지정하십시오.

이 주어진보기는 ​​될 것 같은 :

<p:panelGroup id="container"> 
    <h:form id="form1"> 
     <p:panelGroup id="renderme"> 
      <div id="div1"> 
       ... 
      </div> 
     </p:panelGroup> 
    </h:form> 
</p:panelGroup> 
<p:commandButton action="#{bean.action}" value="update renderme" update=":container:form1:renderme" />