1

我正在尝试在 X-Page 上生成类别和子类别的分层列表。到目前为止,我尝试了两种方法:

第一个有效,它基于 Jesse Gallagher在这篇博客文章中的代码,并使用 xe:outline 控件按照我想要的顺序输出列表。但是,我希望能够为每个条目添加额外的功能和样式(例如编辑和删除链接),但不知道如何在大纲控件中呈现自定义控件。

第二种方法是尝试利用嵌套重复和自定义控件来生成列表,但对于我来说,我无法完成这项工作,我不知道是因为它不起作用还是我只是缺少一些基本的东西。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 添加到大纲中对于扩展的外观:

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

2) 抱歉,我从未尝试将递归 xpage 元素构建为自定义控件,但我不会推荐它。

3)您可以只使用 the<xe:forumView><xp:viewPanel>两者都有很好的可能性来确定viewEntry/row 是否是类别。并为您提供将您想要的所有内容(如链接、按钮或其他控件)添加到一行的可能性。

或另一种获得所需内容的方法是使用 DojoTreeView 构建 Outline/TreeView: Link1 Link2

于 2013-06-06T09:14:57.600 回答