2017-01-28 4 views
0

Notes Clientディスカッションデータベースを模倣したXPageをリファクタリングしています。XPageのネストされた式の言語構文

すべてのナビゲーション情報をツリーにロードし、マネージドBeanにアクセスするネストされたリピートコントロールのセットを作成するマネージドBeanを作成しました。

折りたたみ機能と拡張機能に問題があります。元の著者は、クライアントサイドJavaScriptを使用して、1レベル下のエントリを含むパネルにアクセスします。彼らはすべてをハードコーディングしてこれを行いました。 XMLの1000行は、それでした。

<xp:this.script><![CDATA[collapse("#{id:repeatcontrolpanel3}]}")]]></xp:this.script> 

私はこれを一般的なものにしようとしています。私は、拡大縮小/したい、ネストされたrepeatcontrolの名前が含まれているカスタムコントロールにNameNestedRepeatControlプロパティを設定している、と私は、これがうまくいくことを期待していた:

<xp:this.script><![CDATA[collapse("#{id:#{compositeData.NameNestedRepeatControl}}")]]></xp:this.script> 

が、私はよ取得する

javax.faces.el.MethodNotFoundException: NameNestedRepeatControl: com.ibm.xsp.binding.PropertyMap.NameNestedRepeatControl() 

エラーです。

カスタムコントロールのプロパティから文字列値を取得し、その文字列を#{id:}で評価させる特別な構文がありますか、それとももっと紛らわしいメソッドがありますか?

ありがとうございました。

+0

試してみてください:#{id:compositeData.NameNestedRepeatControl} –

+0

いいえ、動作していないようです。私は今、プロパティを介してスクリプトを送信しようとしています。 –

+0

これは役に立ちますか? http://stackoverflow.com/a/41758010/785061 –

答えて

0

最後に、必要なスクリプトを外部に構築することでこの問題を解決しました。ここでは、script_expandとscript_collapseという2つのStringプロパティを持つNavigation Entry Custom Controlがあります。

とスクリプト機能

<xp:view 
xmlns:xp="http://www.ibm.com/xsp/core"> 
<xp:panel 
    id="outerpanel" 
    styleClass="NavLeftRow" 
    style="#{compositeData.node.styleShowOnFirstLoad}"> 
    <xp:panel 
     id="innerpanel"> 
     <xp:this.styleClass><![CDATA[#{compositeData.node.inBreadCrumbPath ? compositeData.panelStyleWhenActive : compositeData.panelStyleWhenInactive}]]></xp:this.styleClass> 
     <xp:image 
      id="imgCollapsed" 
      url="/xpSectionCollapsed_oneUI.gif"> 
      <xp:this.style><![CDATA[#{compositeData.node.styleHideIfInBreadCrumb}]]></xp:this.style> 
      <xp:this.rendered><![CDATA[#{compositeData.node.hasChildren}]]></xp:this.rendered> 
      <xp:eventHandler 
       event="onclick" 
       submit="false"> 
       <xp:this.script><![CDATA[#{javascript:compositeData.script_expand}]]></xp:this.script> 
      </xp:eventHandler> 
     </xp:image>   
    </xp:panel> 
</xp:panel> 
が外部から呼び出されます。私は関連するIDを手作業で計算するという問題を軽減しています。

<xp:repeat 
     id="repeatfourthlevelnodes" 
     rows="200" 
     var="fourthlevelnode" 
     value="#{thirdlevelnode.children}"> 
    <xc:ccPanelNavigation 
      node="#{fourthlevelnode}"> 
     <xc:this.script_expand> 
      <![CDATA[expand("#{id:repeatfifthlevelnodes}");]]> 
     </xc:this.script_expand> 
    </xc:ccPanelNavigation> 
</xp:repeat> 

私が期待していたほどエレガントではありませんが、非コード化されたコードよりもはるかに優れています。

これは本当に助けとなったSvenの答えPass javascript code to Custom Controlです。これが本当に彼に行くべきです!

関連する問題