【问题标题】:Recursion using repeat controls and custom controls使用重复控件和自定义控件进行递归
【发布时间】:2013-06-06 21:50:38
【问题描述】:

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

第一个有效,它基于 Jesse Gallagher in this blog post 的代码,并使用 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. 有没有办法在 xe:outline 控件中使用 bean 节点输出自定义控件?
  2. 能否像使用 bean 节点一样使用重复和自定义控件从视图中递归输出数据?
  3. 是否有更好的替代方法我忽略了(例如,在 bean 中使用 Java 集合和重复控件?)

谢谢

【问题讨论】:

    标签: xpages


    【解决方案1】:

    1) 有一种方法可以将您自己的 CustomNode 添加到大纲中对于该外观 into 扩展:

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

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

    3) 你可以只使用&lt;xe:forumView&gt;&lt;xp:viewPanel&gt; 两者都有很好的可能性来确定viewEntry/row 是否是一个类别。并让您可以将所需的所有内容(如链接、按钮或其他控件)添加到一行。

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

    【讨论】:

    • 感谢您的想法迈克尔。我得出的结论是,我可能必须建立自己的控制,但只有在没有任何东西可以做我想做的事情时作为最后的手段。
    • 你试过&lt;xe:forumView&gt;吗?正如我所见,您使用视图作为数据源,为什么不使用 viewControl 来显示数据。
    • 我无意中提前提交了之前的评论,试图重新编辑它! :( 我确实考虑过 ForumView,但目前类别之间的关系并未在传统的 Notes 父子层次结构中维护,而是更像是通过 JOIN 连接多个 SQL 表 - 非常类似于 Jesse 的组织结构图视图。但我没有t 完全排除了在必要时重新使用视图的可能性。(这是我确切知道如何在 PHP 和 mySQL 中执行此操作的场景之一,并且我确信我也应该能够在 XPages 中执行此操作,如果这是有道理的。)
    猜你喜欢
    • 2018-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-26
    • 1970-01-01
    相关资源
    最近更新 更多