2013-10-17 2 views
0

XPage에서 선택한 항목을 기반으로 sessionScope 변수를 설정하는 네비게이터가 있습니다. 그런 다음 SwitchFacet에서이 값을 사용하여 여러 가지보기 중 하나를 표시했습니다. 그리고 이것은 잘 작동했지만, switchFacet은 모든 뷰에 대해 전체 트리를로드한다는 점을 이해했습니다. 여기서 dynamicContent 컨트롤은 선택한 패널의 트리만로드합니다. 그래서 나는 다음과 같은 코드를 사용하여 XPage (네비게이터는 panelAll의 onclick의 부분 refreesh을한다)에 panelAll 내부 dynamicContent에 컨트롤을 만든 :SessionScope 변수를 사용하여 DynamicContent 선택

<xp:panel id="panelAll" style="width:auto"> 
    <xe:dynamicContent id="dynamicContent1"> 
    getComponent("dynamicContent1").show(sessionScope.get("ssSelectedView"); 
    <xp:this.facets> 
     <xp:panel xp:key="vwProfile"> 
     <xc:ccProfileView></xc:ccProfileView> 
     </xp:panel> 
     <xp:panel xp:key="vwPending"> 
     <xc:ccTransactionView></xc:ccTransactionView> 
     </xp:panel> 
     <xp:panel xp:key="vwAgentLog"> 
     <xc:ccAgentView></xc:ccAgentView> 
     </xp:panel> 

    </xp:this.facets> 
    </xe:dynamicContent> 
</xp:panel> 

문제는 그들이 switchFacet와는 같은 전망은 변경하지 않는 것이있다 . sessionScope 변수 id가 올바르게 설정되어 있고 onClick 부분 새로 고침이 panelAll을 새로 고쳐야하고로드 할 다른 패널을 선택해야하지만 vwProfile보기 만 표시한다는 것을 알고 있습니다. 역동적 인 콘텐츠를 만들기 위해 내가해야 할 일이 있습니까?

답변

1

dynamicContent 컨트롤은 안타깝게도 페이지를 완전히 다시로드 할 때만 부분 업데이트가 작동하지 않습니다. 나는 몇 달 전에 같은 것을 시도했지만 그것은 나에게도 효과가 없었다.

"동적 콘택트"를 사용자 지정 컨트롤에 넣고 rendered 속성을 사용하여 sessionScope 변수의 상태에 따라 표시합니다.

XPage 엔진은 항상 모든 사용자 정의 컨트롤의 내용을 트리에 포함하고 있기 때문에 완벽하지는 않습니다. 그러나 복잡한 복잡한 응용 프로그램에서는 괜찮습니다.

+0

은 내가 switchFacet이 방법으로 작업을했지만, 좀 더 효율적으로해야하기 때문에 나는이 dynamicContent로 이동,하지만 완전 새로 고침 중 하나를 정말 효율적으로 처리 될 것 같지 않습니다 생각했다. switchFacet과 렌더링 된 패널 간의 성능 차이에 대한 생각은? –

+0

방금 ​​두 개의 중간 규모 복잡한 응용 프로그램을 만들었습니다. 각 응용 프로그램은 하나의 XPage와 약 20-30 개의 사용자 지정 컨트롤을 가지고 있으며 부분 업데이트가있는 sessionScope 변수에 따라 렌더링됩니다. 일부 컨트롤에는 노트보기가 포함되고 다른 탭에는 많은 탭이있는 양식이 포함됩니다. 그것은 매우 빠르며 사용자에게 아주 좋은 경험입니다. –

+0

동적 콘텐츠가 작동합니다. getComponent(). show를 네비게이터의 onClick으로 옮긴 다음 부분 새로 고침이 작동합니다. 내 onClick은 다음을 수행합니다. getComponent ("dynamicContent1"). show (context.getSubmittedValue()); \t return sessionScope.put ("ssSelectedView", context.getSubmittedValue()); –

1

dynamicContent.show("yourFacetName")으로 전화해야합니다. 이 방법은 나를 위해 작동합니다. 부분 새로 고침 (부분 실행 모드)을 사용하고 있지만 패싯 내부에서 .show()을 호출합니다. 차이가 있는지 나는 모른다. 이런 식으로 뭔가 :

<xe:dynamicContent id="dynamicContent1" 
defaultFacet="read"> 
<xp:this.facets> 
    <xp:panel xp:key="read"> 
    <xp:link> 
    <xp:eventHandler event="onclick" 
submit="true" refreshMode="partial" refreshId="tableRow" 
execMode="partial" execId="tableRow"> 
    <xp:this.action><![CDATA[#{javascript:var c = getComponent("dynamicContent1"); 
c.show("edit");}]]></xp:this.action> 
    </xp:eventHandler> 
    </xp:link> 
    </xp:panel> 
    <xp:panel xp:key="edit"> 
</xp:this.facets> 
</xe:dynamicContent> 
+0

멋지다, 나는 잘 모르겠다 :-) –

+0

내 문제는 dynamicControl 내부에있는 내 예제에서 getComponent(). show (sessionScope)를 호출했기 때문에 onClick 이벤트가 dynamicControl 안에 있다고 생각하지만 partialrefresh가 외부에서 오는 것입니다 (예 : 내 탐색기). AS Julian은 dynamicContent를 새로 고치려면 완전히 새로 고침해야하는 것처럼 보입니다. –

+0

그래서 최종 사용자가 this.facets 내에서 아무런 조치를 취하지 않으면 내 경우에 - 어떻게 동적 인 내용을 사용할 수 있는지 알 수 없습니다. switchFacet 컨트롤이나 여러 개의 사용자 정의 컨트롤에서 렌더링 된 속성을 사용하면 작동하지만 실제로는 그렇게 이해할 수 없을 정도로 전체 트리를 모두로드합니다. 그러나 그들은 일한다! –