0

練習用にswitchFacetを作りたいのですが、だめです。実際、どこから始めればよいかわかりません。これはjavaだけで書けますか?これが私のコードです。sessionScope を介して変数を渡そうとします。ボタンは値を更新しますが、ファセットは更新しません。URL をクリックしてから ENTER をクリックすると、ファセットの値が変わります。

これは私の Xpage です:

<xc:FacetContainerCC viewPanelTest="#{sessionScope.VarTest}">       
<xp:this.facets>
    <xp:div xp:key="SecondCC"><xc:SecondCC></xc:SecondCC></xp:div>
    <xp:div xp:key="FirstCC"><xc:FirstCC></xc:FirstCC></xp:div>
</xp:this.facets>

<xp:button value="#{javascript:sessionScope.VarTest}" id="button1">
<xp:eventHandler event="onclick" submit="true" refreshMode="complete">
    <xp:this.action><![CDATA[#{javascript:if (sessionScope.get("VarTest") ==  "First") 
    sessionScope.put("VarTest", "Second"); else sessionScope.put("VarTest","First");}]]>
    </xp:this.action>
</xp:eventHandler>

そして私の側面:

<xp:callback id="callback1">
<xp:this.facetName><![CDATA[#{javascript:
    var viewPanelTest = sessionScope.get("VarTest");
    if (viewPanelTest == "First") return "FirstCC"; 
    else return "SecondCC";}]]>
</xp:this.facetName>

ボタンによるページの更新と URL の再入力には違いがあることに気付きました。ボタンは POST リクエスト、URL を再入力すると GET リクエストになります。FirstCC と SecondCC は、ファセットにドロップされたカスタム コンポーネントです。そして...同じ名前のsessionScope変数がクライアントとサーバーに共存していますよね?

4

1 に答える 1

1

ファセットはページの読み込み時に計算されます。ページが読み込まれている限り、ファセットは再計算されません。したがって、 facetName は更新されません。設計どおりに動作します。switchFacet はすべてのファセット名をロードしますが、選択されたものだけをレンダリングします。

URL で Enter キーを押すと、そのページの新しいインスタンス (新しい viewScope を使用) が取得されますが、ボタンはページの更新 (同じ viewScope) を実行するため、facetName の再計算は行われません。

switchFacet は、既存のファセット機能ではカバーできないため、ユース ケースに正確に対応するために作成されました。

于 2014-01-08T05:43:31.220 に答える