我有一个包含重复控件的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>
答案 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对象的回收添加到代码中。)