1

X-Page でカテゴリとサブカテゴリの階層リストを生成しようとしています。これまでのところ、次の 2 つの方法を試しました。

最初の機能は、このブログ投稿のJesse Gallagher によるコードに基づいており、xe:outline コントロールを使用して、希望どおりの順序でリストを出力します。ただし、各エントリに追加機能とスタイリング (リンクの編集と削除など) を追加できるようにしたいのですが、アウトライン コントロール内でカスタム コントロールをレンダリングする方法がわかりません。

2番目の方法は、ネストされた繰り返しとカスタムコントロールを活用してリストを生成しようとしていますが、私の人生では、この作業をうまく行うことができず、それが機能しないためなのか、それとも単に根本的な何かが欠けています。XPage の基本的なコードは次のとおりです。

<xp:view xmlns:xp="http://www.ibm.com/xsp/core" xmlns:xc="http://www.ibm.com/xsp/custom">
<xp:this.data>
    <xp:dominoView var="Categories" viewName="vLUTopCat"></xp:dominoView>
</xp:this.data>

<xc:ccUI navigationPath="Admin/Main" pageName="Admin">
    <xp:this.facets>
        <xp:panel xp:key="facetMiddle">
        <h2>Categories</h2>             
            <ul id="adminCatList">
                <xp:repeat id="parentCat" rows="30" value="#{Categories}" var="DocCat" indexVar="catIdx" disableOutputTag="true">                       
                    <xc:ccCategoryList>
                        <xc:this.catID><![CDATA[#{javascript:DocCat.getColumnValue("docID")}]]></xc:this.catID>
                        <xc:this.catName><![CDATA[#{javascript:DocCat.getColumnValue("categoryName")}]]></xc:this.catName>
                    </xc:ccCategoryList>                                            
                </xp:repeat>
            </ul>
        </xp:panel>
    </xp:this.facets>
</xc:ccUI>

カスタム コントロール (ccCategoryList) のコードは次のとおりです。

<xp:view xmlns:xp="http://www.ibm.com/xsp/core" xmlns:xc="http://www.ibm.com/xsp/custom">


<xp:text escape="true" id="computedField1"
    value="#{compositeData.catName}" tagName="li" />
<xp:repeat id="rptSubCat" rows="30" var="subCat"
    disableOutputTag="true">
    <xp:this.facets>
        <xp:text disableTheme="true" xp:key="header"
            escape="false">
            <xp:this.value><![CDATA[<ul>]]></xp:this.value>
        </xp:text>
        <xp:text disableTheme="true" xp:key="footer"
            escape="false">
            <xp:this.value><![CDATA[</ul>]]></xp:this.value>
        </xp:text>
    </xp:this.facets>
    <xp:this.value><![CDATA[#{javascript:var tview = database.getView("vLUSubCat");
var v = compositeData.catID;
var vc:NotesViewEntryCollection = null;
if (v != null) {
vc = tview.getAllEntriesByKey(v);
}
vc}]]></xp:this.value>
    <xc:ccCategoryList>
        <xc:this.catID><![CDATA[#{javascript:subCat.getColumnValues()[3]}]]></xc:this.catID>
        <xc:this.catName><![CDATA[#{javascript:subCat.getColumnValues()[1]}]]></xc:this.catName>
    </xc:ccCategoryList>
</xp:repeat>
</xp:view>   

したがって、私の関連する質問は次のとおりです。

  1. Beanノードを使用してxe:outlineコントロールにカスタムコントロールを出力する方法はありますか?
  2. Bean ノードを使用する場合と同じように、繰り返しとカスタム コントロールを使用して、ビューからデータを再帰的に出力できますか?
  3. 私が見落としているより良い代替方法はありますか (たとえば、Bean で Java Collection を使用し、コントロールを繰り返しますか?)

ありがとう

4

1 に答える 1

1

1) 独自の CustomNode を Outline For に追加して拡張する方法があります。

com.ibm.xsp.extlib.tree.ITreeNode;
com.ibm.xsp.extlib.tree.complex.ComplexLeafTreeNode;
com.ibm.xsp.extlib.tree.impl.TreeNodeWrapper;

2) 申し訳ありませんが、再帰的な xpage 要素をカスタム コントロールとして構築しようとしたことはありませんが、お勧めしません。

3) /行がカテゴリかどうかを判断するために、<xe:forumView>または<xp:viewPanel>両方を使用するだけでよい可能性があります。viewEntryリンク、ボタン、その他のコントロールなど、必要なものすべてを行に追加する可能性を提供します。

または、必要なものを取得する別の方法は、DojoTreeView を使用して Outline/TreeView を構築することです: Link1 Link2

于 2013-06-06T09:14:57.600 に答える