2012-03-12 2 views
0

정의한 속성이있는 사용자 지정 컨트롤이 있습니다. 나는 합성 데이터에 사용자 정의 컨트롤에있는 레이블을 사용합니다. 레이블이 잘 표시되지만 레이블 및 복합 데이터를 사용하여 컨트롤 외부에있는 컨트롤의 레이블 값을 사용하고 싶습니다.복합 데이터를 기반으로 한 레이블 값 가져 오기

하지만 레이블 값에 대해 null이 반환됩니다. 레이블 값에 액세스 할 때마다 복합 데이터가 계산되고 계산을위한 참조 점이 포함 된 컨트롤이 아닌 레이블 값에 액세스하는 컨트롤 인 것처럼 보입니다.

범위 변수를 대신 사용할 계획이지만 복합 데이터를 작동시키는 방법은 있습니까?

+0

질문의 선택이 명확하지 않습니다. Bruce, 작업중인 코드의 샘플을 제공해 주시면 문제를 조금 더 잘 이해할 수 있습니다. – pipalia

답변

3

복합 데이터는 해당 데이터를 정의하는 사용자 지정 컨트롤 내에 만 존재합니다. 따라서 내면에 도달하는 것보다 바깥쪽에 도달하는 것이 훨씬 쉽습니다.

범위 변수 외에도 dataContext를 정의 할 수도 있습니다. 이는 변수를 일시적으로 requestScope에 푸시하기 때문에 기술적으로 여전히 범위 변수를 사용하지만 명시 적으로 그렇게하지 않아도되기 때문에 작업하기가 약간 더 쉽습니다. 예를 들어 위의 예에서

<xp:view 
    xmlns:xp="http://www.ibm.com/xsp/core" 
    xmlns:xc="http://www.ibm.com/xsp/custom"> 
    <xp:this.dataContexts> 
     <xp:dataContext 
      var="labelValue" 
      value="#{someExpression}" /> 
    </xp:this.dataContexts> 
    <xp:text 
     value="#{labelValue}" /> 
    <xc:labelContainer 
     labelValue="#{labelValue}" /> 
</xp:view> 

, 어디서나 컨테이너 내, 방금 # {labelValue}를 참조 할 수 있습니다 나는이 labelValue 데이터 컨텍스트를 첨부했습니다있는 상태, 그리고 반환 어떤 값을 표현 그 dataContext가 리턴되었습니다. 그러면 XPage 내에서 사용할 수있는 단일 변수가 제공되지만 사용자 정의 컨트롤로 전달됩니다.

+0

내 질문에 왜 그렇게 될 것이라고 생각하십니까? CC가 귀하를 위해 가치를 계산하고 그 결과를 라벨에 저장할 것이라고 생각할 것입니다. 그것들은 다른 어떤 통제 장치와 마찬가지로 정적 값을 읽는 것과 같다고 생각합니다. –

+0

구성 요소 속성은 로컬 값 또는 값 바인딩을 가질 수 있습니다. 구성 요소에서 setValue()를 호출하면 정적 로컬 값이 직접 제공됩니다. 대신, CC에서 compositeData를 참조하는 값을 정의하는 경우 값 바인딩을 정의했습니다. 이렇게하면 value 속성이 요청 될 때마다 표현식이 다시 계산됩니다. 따라서 CC 외부의 레이블에서 getValue()를 호출 할 수 있습니다.이 외부 참조는 compositeData를 참조하며 외부에서 무언가가 전달됩니다. 런타임 성능 및 코드 명확성을 위해 평가를 통합하는 것이 좋습니다. –

+0

감사합니다. 어떻게 평가를 통합하겠습니까? 적어도이 경우에는 페이지가로드 될 때만 평가하기를 원할 것입니다. 여기에 어쨌든 할 수 있습니까? 페이지로드시이를 수행하고 복합 데이터와 함께 레이블 값을 설정하십시오. –

1

나는 데이터 컨텍스트에서 Tim의 제안을 좋아한다. 그러나 필요한 경우 컨트롤의 propertyMap에있는 값에 액세스 할 수 있습니다. 이것은 레이블이 아니라 복합 데이터입니다. 이것은 구성 요소가 '회신 할 수있는 방법'입니다.

+0

stwissel, 어떻게하면 컨트롤의 속성 맵에 액세스 할 수 있습니까? –

+0

var theControl = getComponent ("theControlID"); var pMap = theControl.getPropertyMap(); // Ulrich의 예제가 있습니다. http://www.eknori.de/2011-07-15/get-custom-properties-from-another-custom-control/ null을 확인해야합니다! – stwissel

관련 문제