选择问题p:dataTable,其中selectionmode设置为多个嵌套在p:dataGrid

时间:2016-06-07 03:41:47

标签: jsf primefaces datatable datagrid

我正在开发一个PrimeFaces项目,我选择在p:DataGrid中使用p:DataTable。 DataTable的selectionMode属性设置为“multiple”。我在页面上有一个按钮,当我点击它时,我希望在各种生成的表中获得所有选中的复选框。所有复选框都带有相同类型的信息(由于我在项目中使用的信息分组方案,它们位于不同的表中)。

由于我在最终呈现的页面中有多个DataTable,我如何获得所选的复选框?我尝试使用DataTable的selection="#{myBean.selectedOptions}"属性,但它似乎只获得了一个生成的表的选定选项(显然是第一个)。我该怎么做才能获得p:DataGrid生成的所有表的选定选项? JavaScript的?我在DataTable行为中是否缺少任何一点?

(嗯..我不知道我是否能够让自己足够清楚 - 英语不是我的母语)。

[编辑] 更多信息:

  • 生成的DataTables数量是可变的
  • 我尝试使用jsf visit方法遍历用户界面组件视图as shown here,查找DataGrid中的所有复选框,但找不到任何复选框(我打印到控制台所有的找到的元素)。我认为这是因为复选框封装在DataTable组件中。这让我想到不使用selectionMode =“multiple”,而是手动为每个复选框添加复选框和隐藏的输入元素,这样我就可以使用visit方法找到复选框(或“输入隐藏”)。这种方法令人遗憾的是,我不得不停止使用DataTable selectionMode =“multiple”功能的一些好东西,比如选中相应的复选框时使用hilighting行,以及准备使用“check all”复选框自动放入ckeckboxes列的标题。
  • 我尝试在选择属性中使用嵌套List,但它不起作用。主要思想是使用selection =“#{bean.myListOfLists.get(t.counter)}”之类的东西。 “counter”变量取自用于实现DataTable的当前行的对象(由属性var =“t”中的t变量表示)。 DataTable似乎不接受这种方法。它不符合嵌套列表。
  • 我尝试使用上面的approch进行修改:代替列表列表,构建一个新类“B”并创建一个B列表(selection =“#{bean.myListOf_B_Objects.get(t.counter) .listInsideBObject}“)。结果与最后一种方法相似:B对象中没有一个列表得到满足。

下面是我所做的简化视图(更类似于上一个案例,但它只是为了得到全局)

<p:dataGrid var="gridCellContent"
            value="#{myBean.dataGridContent}"
            layout="grid" id="id01" columns="3"">

  <p:dataTable var="something" 
    value="#{gridCellContent.listOfSomething}"
    rowKey="#{something.id}"
    selection="#{myBean.listOf_B_Objects.get(gridCellContent.counter).listInside_B_Object}">
                                                 
    <p:column selectionMode="multiple" />

    <p:column>
      <h:outputText value="#{something.sometext}" />
    </p:column>

  </p:dataTable>


  <f:facet name="footer">
    <p:commandButton id="btnSave" value="Save" 
      actionListener="#{myBean.btnSave}"/>
  </f:facet>

</p:dataGrid>

[编辑2] 关注@ JaqenH'ghar的消息后,我尝试了下面的修改,遗憾的是仍然无法正常工作:

<p:dataGrid var="gridCellContent"
            value="#{myBean.dataGridContent}"
            layout="grid" id="id01" columns="3"
            rowIndexVar="count">

  <p:dataTable var="something" 
    value="#{gridCellContent.listOfSomething}"
    rowKey="#{something.id}"
    selection="#{myBean.listOfLists.get(count)}">
                                                 
    <p:column selectionMode="multiple" />

    <p:column>
      <h:outputText value="#{something.sometext}" />
    </p:column>

  </p:dataTable>


  <f:facet name="footer">
    <p:commandButton id="btnSave" value="Save" 
      actionListener="#{myBean.btnSave}"/>
  </f:facet>

</p:dataGrid>

对于myBean:

@ManagedBean
public class MyBean {
  ...
  private List<List<Something>> listOfLists = new ArrayList<List<Something>>();

  public List<List<Something>> getListOfLists(){
    this.listOfLists.add(new ArrayList<Something>());
    return this.listOfLists;
  }

  public void setListOfLists(List<Something> listOfSomething) {
    this.listOfLists.add(listOfSomething);
  }  

  ... 
}

0 个答案:

没有答案