我需要使用Xpages的帮助。如果有这样的问题,或者有一个例子,你可以告诉我在哪里找到它。 我有一个包含多个行和列的主页面,如下所示
[Checkbox][Column1][Column2][Column3][Column 4][Column 5]
[Checkbox][Data1][Data2][Data3][Data4][Data5]
[Checkbox][Data1][Data2][Data3][Data4][Data5]
[Checkbox][Data1][Data2][Data3][Data4][Data5]
[Checkbox][Data1][Data2][Data3][Data4][Data5]
[Checkbox][Data1][Data2][Data3][Data4][Data5]
现在数据5是默认值,它是未定义的,可以设置的唯一值是“执行”或“不执行”。有没有办法让Chek有几行我可以使用组合框和保存按钮将值改为数据5中的Do或Do,而无需进入数据的详细视图。
例如,我有30行将Data 5设置为undefined,我希望其中10行设置为Do.我只是在复选框中取消它们,在组合框中选择Do并按Save。所以我没有必要逐行编辑并逐一编辑它们。
答案 0 :(得分:2)
根据您的需要调整XSnippet Simple "Trash" Folder c/w Selectable Rows & Restore Functionality。
<xp:comboBox
id="comboBox1"
value="#{viewScope.DoOrDont}">
<xp:selectItem itemLabel="Do"></xp:selectItem>
<xp:selectItem itemLabel="Do not"></xp:selectItem>
</xp:comboBox>
<xp:button id="button4" value="Change selected rows">
<xp:eventHandler event="onclick" submit="true"
refreshMode="complete">
<xp:this.action><![CDATA[#{javascript:
var vp1 = getComponent("viewPanel1");
if(null != vp1){
var dm:com.ibm.xsp.model.domino.DominoViewDataModel = vp1.getDataModel();
if(null != dm){
var idsIter = dm.getSelectedIds();
while(null != idsIter && idsIter.hasNext()){
var id = idsIter.next();
if(null != id){
var doc:NotesDocument = database.getDocumentByID(id);
if(null != doc){
doc.replaceItemValue("yourField", viewScope.DoOrDont);
doc.save();
}
}
}
}
}}]]></xp:this.action>
</xp:eventHandler>
</xp:button>
该示例包含一个组合框,您可以在其中选择&#34; Do&#34;或&#34;不要&#34;以及一个将此值设置为所有选定文档的按钮。
答案 1 :(得分:0)
不确定我是否了解了您的要求,但这是一种方法。
当您“勾选”一个复选框时,使用服务器端“onclick”事件来设置包含noteid的sessionScope,并包含您要更新文档的任何值。将刷新ID设置为复选框。
对于用户勾选的每个复选框,会在sessionScope中添加一个新的noteid。 当用户准备使用保存按钮保存更改时,在sessionScope中循环unids并在后台更新文档并清除sessionScope
使用这种方法,您还可以提供一个“下一页”页面,显示范围内的所有文档,并允许用户确认保存
您可能还想添加一个keepalive,因此不会丢弃用户范围
答案 2 :(得分:0)
最好的方法是组合客户端和服务器端代码。以下是我在这种情况下要做的事情:
将StyleClass添加到复选框。要执行此操作,请单击复选框,转到所有属性并在列表中查找StyleClass。例如,我们将此类名称设为myCheckboxClass
。使用此类名称,您将能够轻松检索客户端上选中的所有复选框。
将自定义属性添加到包含与该行相关的文档的unid的复选框。要执行此操作,请单击复选框,再次转到所有属性并找到attr。添加一个名为unid
的新attr并将其值计算为该行的unid。此属性允许您从客户端了解此复选框链接到哪个文档。
现在,在您的保存按钮上,使用客户端脚本,您可以通过以下方式轻松获取要修改的所有文档:
var documentsToUpdate = [];
var checkboxes = document.getElementsByClassName("myCheckboxClass");
for (var i = 0; i < checkboxes.length; i++) {
var checkbox = checkboxes[i];
if (checkbox.checked) {
documentsToUpdate.push[checkbox.getAttribute("unid")];
}
}
// Send the array, in a JSON format, to the server
return XSP.toJson(documentsToUpdate);
现在在您的保存按钮上,这次是服务器端脚本,从客户端检索信息,并使用unids数组更改所选文档中所需的值:
// Get the return value from the client
var jsonDocumentsToUpdate = context.getSubmittedValue();
// Change the JSON into an array
var documentsToUpdate = fromJson(jsonDocumentsToUpdate);
// Go through the array and update the documents
for (var i = 0; i < documentsToUpdate.length; i++) {
var doc:NotesDocument = database.getDocumentByUNID(documentsToUpdate[i]);
// DO YOUR CHANGES
doc.save();
}
现在,您可以随心所欲地做任何事情。您只需检查用户在组合框中选择的内容并根据它进行适当的更改。我认为学习这种结合客户端和服务器端代码的方法非常重要,这可以在Xpages中应用很多,以便快速做到你想要的。