在视图中更改多个数据

时间:2015-02-19 13:09:59

标签: xpages lotus-notes

我需要使用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。所以我没有必要逐行编辑并逐一编辑它们。

3 个答案:

答案 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)

最好的方法是组合客户端和服务器端代码。以下是我在这种情况下要做的事情:

  1. 将StyleClass添加到复选框。要执行此操作,请单击复选框,转到所有属性并在列表中查找StyleClass。例如,我们将此类名称设为myCheckboxClass。使用此类名称,您将能够轻松检索客户端上选中的所有复选框。

  2. 将自定义属性添加到包含与该行相关的文档的unid的复选框。要执行此操作,请单击复选框,再次转到所有属性并找到attr。添加一个名为unid的新attr并将其值计算为该行的unid。此属性允许您从客户端了解此复选框链接到哪个文档。

  3. 现在,在您的保存按钮上,使用客户端脚本,您可以通过以下方式轻松获取要修改的所有文档:

    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);
    
  4. 现在在您的保存按钮上,这次是服务器端脚本,从客户端检索信息,并使用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();
    }
    
  5. 现在,您可以随心所欲地做任何事情。您只需检查用户在组合框中选择的内容并根据它进行适当的更改。我认为学习这种结合客户端和服务器端代码的方法非常重要,这可以在Xpages中应用很多,以便快速做到你想要的。