重复控制可防止刷新数据

时间:2013-09-13 19:36:24

标签: xpages lotus-notes

我有一个包含重复控件的xpage。重复根据视图中的值生成动态可编辑字段。我希望重复只抓取一次数据,以便重复控件不会收到对视图的后续更新。

根据我对重复控制的理解,这可能是不可能的。

无论如何我能做到这一点吗?

这里的代码示例是什么。

<xp:repeat id="repeat2" rows="100" value="#{view6}" indexVar="rowData" var="dataCol" repeatControls="false">
    <xp:tr>
        <xp:td style="width:400px">
            <xc:dynamicChecklistItem
                itemname="#{javascript:rowData+'itemname'}"
                savedname="#javascript:rowData+'savedname'}">
            </xc:dynamicChecklistItem>
        </xp:td>
        <xp:td>
            <xc:dynamicCompleted
                completedField="#{javascript:rowData+'completed'}">
            </xc:dynamicCompleted>
        </xp:td>
        <xp:td>
            <xc:dynamicVerified
                verifiedField="#{javascript:rowData+'verified'}">
            </xc:dynamicVerified>
        </xp:td>
        <xp:td>
            <xc:dynamicComments dsn="document1"
                fieldName="#{javascript:rowData+'Comments'}">
            </xc:dynamicComments>
        </xp:td>
    </xp:tr>
</xp:repeat>

1 个答案:

答案 0 :(得分:1)

您可以设置dominoView的属性dataCache="full"。这将在第一次请求时保存所有视图条目列值并恢复,并在后续请求中使用它们而无需返回查看。

有关优点和缺点,请参阅第32页here

<xp:this.data>
    <xp:dominoView
        var="view6"
        viewName="yourView"
        dataCache="full">
    </xp:dominoView>
</xp:this.data>

作为替代方案,您可以在viewScope变量中保存视图中所需的值,并在重复控制中使用它。

<xp:this.beforePageLoad><![CDATA[#{javascript:
    if (viewScope.list == null) {   
        var view = database.getView("yourView");
        var allEntries = view.getAllEntries();
        var list = new Array();
        var entry = allEntries.getFirstEntry();
        for (var i = 0; i < allEntries.getCount(); i++) {
            var columnValues = entry.getColumnValues();
            var items = [columnValues.get(0).toString(), columnValues.get(1).toString()];
            list.push(items);
            entry = allEntries.getNextEntry();
        }
        viewScope.list = list}
    }]]>
</xp:this.beforePageLoad>
<xp:repeat
    id="repeat1"
    rows="100"
    value="#{viewScope.list}"
    indexVar="index"
    var="listElement">
    <xp:text
        id="computedField1"
        value="#{listElement[0]}">
    </xp:text>
    <xp:br />
</xp:repeat>

(您必须将Notes对象的回收添加到代码中。)

相关问题