2012-06-08 13 views
0

바인딩 후 나는 사용자 정의 구성 요소를 정의하고 다음과 같은 바인딩을 사용하려고 사라 :JSF 구성 요소는

<ui:composition ...> 
    <div> 
     <f:subview> 
      <a4j:outputPanel> 
       <h:commandButton id="t1" value="test!" /> 
       ... 
      </a4j:outputPanel> 
     </f:subview> 
    </div> 
</ui:composition> 

나는이 같은 바인딩 속성을 추가 할 때까지이 구성 요소가 제대로 작동 :

<h:commandButton id="t1" binding="#{foo}" value="test!" onclick="alert('I am #{id:cid(foo)}'); return false;" /> 

이를 구성 요소가 표시되지 않고이 버튼에 해당하는 코드를 찾을 수 없습니다.

누구든지 수정 사항을 알고 있습니까?

+0

바인딩은 # {bean.prop}과 같은 bean의 속성에 속하지 않습니다. 아니면 그 세부 사항을 그냥 남겨 두셨습니까? 실제로 속성에 바인딩 한 경우 getter 및 setter 코드를 표시 할 수 있습니까? – Eelke

+0

@Eelke 답장을 보내 주셔서 감사합니다. 나는 내가 위에서 보여준 것과 똑같은 일을했다. 여기에 설명 된대로 작동해야합니다 : http://illegalargumentumentception.blogspot.ca/2009/10/jsf-working-with-component-identifiers.html#componentbindingclientid. – eelpa

+0

이 템플릿이 여러 번 포함되어 있습니까? – BalusC

답변

1

예, 그것이 사용되는 여러 번

원인이있다. binding은 해당 구성 요소에 대한 고유 번호 을 참조해야합니다. 지금은 하나의 동일한 참조를 참조하는 물리적으로 여러 구성 요소가 있습니다.

구체적인 기능 요구 사항은 무엇인지 모르겠지만 JavaScript 컨텍스트에 이미 들어있을 때는 이러한 접근 방식이 필요하지 않습니다. 생성 된 HTML 요소 자체의

<h:commandButton id="t1" value="test!" onclick="alert('I am ' + id); return false;" /> 

이드 즉 정확히 JSF 성분 클라이언트 ID와 동일한 다음과 같이 특정 예는 단지도 해소 할 수있다.

+0

감사합니다. 그러나 여기에서 바인딩을 사용하는 원래 목적은이 구성 요소가 데이터 테이블의 모든 행에 사용되며 버튼 텍스트가 클릭시 업데이트되도록되어 있기 때문입니다. ID를 사용하여 구성 요소를 식별하려고했지만 데이터 테이블 안에 있기 때문에 대신 클라이언트 ID가 필요합니다. – eelpa

+0

그렇다면 내 대답의 예제가 여전히 적용됩니다. 아니면 더 나은 'onclick = "value ="updated! "; false false를 반환합니다. – BalusC

+0

같은 행에 있다면'var labelId = button.id.substring (0, button.id.lastIndexOf (':') - 1) + 'labelId';'를 사용하고'document.getElementById()'. – BalusC

관련 문제