2011-09-06 2 views
0

JSF2 및 Primefaces를 처음 사용하고 update 구성 요소에 대한 문제점을 파악했습니다.구성 요소를 업데이트하기위한 id에 대한 규칙

내가 update="f1:counter"를 사용할 필요가 또 다른 h:form에서 직접 update="counter"

<h:form id="f1"> 
    <h:outputText id="counter" value="#{clientBean.counter}" /> 
    <h:graphicImage url="/images/circle-ok.png"> 
    <p:ajax event="click" update="counter" process="@this" 
      listener="#{clientBean.tag}"/> 
    </h:graphicImage> 
</h:form> 

수, '내가 다음 코드 조각을 가정 할 수 있습니다. update="counter" 만 여기서 작동하지 않습니다.

내가 JSF1.2 (및 RichFaces)와 함께이 직면하지 않은
<h:form id="f2"> 
    <p:dataTable var="var" value="#{clientBean.vf}"> 
    <p:column> 
     <f:facet name="header">Tag</f:facet> 
     <h:graphicImage url="/images/circle-ok.png"> 
     <p:ajax event="click" update="f1:counter" process="@this" 
       listener="#{clientBean.tag}" /> 
     </h:graphicImage> 
    </p:column> 
    </p:dataTable> 
</h:form> 

올바르게 ID를 해결하기위한 규칙은 무엇입니까?

답변

2

첫 번째 예에서 JSF는 아약스 수신기와 동일한 범위에서 counter 요소를 조회 할 수 있습니다. Form은 NamingContainer를 구현합니다. 즉, html에 사용 된 클라이언트 ID에 고유 한 ID를 접두어로 사용하고 ID에 고유 한 이름 공간을 만듭니다. 브라우저 아래에서 페이지 소스를 살펴보십시오. 카운터에 할당 된 카운터 ID는 f1 :입니다. 두 번째 예제에서는 범위에 counter 요소가 없으므로 (f2 내부) 조회가 실패합니다.

prependId = "false"로이 양식 동작을 해제 할 수 있습니다. 이것은 모든 양식에서 동일한 ID를 갖는 요소가 없을 것이라는 점을 확신 할 때 유용합니다.

Icefaces는 다르게 작동합니다. 자동으로 HTML 델타를 계산하여 부분 업데이트로 브라우저에 전송합니다. 대부분의 경우 이것은 프로그래머에게 더 편리하지만 상당한 성능 비용이 따른다. JSF2가 icefaces 부분 업데이트 개념을 채택했지만 ID가 명시 적으로 전달되어야한다고 생각합니다.

관련 문제