我正在尝试在 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>
所以我的相关问题是:
- 无论如何要使用 bean 节点在 xe:outline 控件中输出自定义控件吗?
- 我可以像使用 bean 节点一样使用重复和自定义控件从视图中递归地输出数据吗?
- 有没有我忽略的更好的替代方法(例如,在 bean 中使用 Java Collection 和重复控件?)
谢谢