包含selectionMode =“multiple”的数据表的AccordionPanel

时间:2011-12-16 16:05:15

标签: java jsf primefaces

XHTML文件:              

    <p:tab title="firstTab" id="FT">

        <p:dataTable var="..." value="#{...}" id="firstTable" selectionMode="multiple"
        selection="#{myController.selectedRows}">
            <p:column>...</p:column>
            <p:column>...</p:column>
            <p:commandButton value="View" action="#myController.viewSelected}"/>
        </p:dataTable>
    </p:tab>

    <p:tab title="secondTab" id="ST">

        <p:dataTable var="..." value="#{...}" id="secondTable" selectionMode="multiple"
        selection="#{myController.selectedRows}">
            <p:column>...</p:column>
            <p:column>...</p:column>
            <p:commandButton value="View" action="#myController.viewSelected}"/>
        </p:dataTable>
    </p:tab>

托管Bean:

@ManagedBean
@RequestScoped
public class MyController{
    MyObject[] selectedRows;
        //get+set

    public void viewSelected(){
        System.out.println(selectedRows.length)
    }
}

控制台输出有所不同。有时输出 0 但通常selectedRows内容搞砸了。如果我在两个dataTable-s中都有选择并按下两个commandButton-s中的一个,结果会混合。我猜这是因为按钮没有特定的id,或者我应该为每个dataTable使用不同的业务属性。哪个是这个问题的正确解决方案?

谢谢!

1 个答案:

答案 0 :(得分:1)

您使用的PF版本是什么?

此外,如果commandButton不在列中或其他任何内容中,那么与他有什么关系? 如果你想成为一个dataTable页脚,你必须这样做:

<f:facet name="footer"> 
   <p:commandButton value="View" action="#myController.viewSelected}"/>
</facet> 

您将所有行从两个dataTable分配到同一个数组的方式,我认为这不是一个好习惯,事实上我从来没有见过这样的东西!有什么意义?即使您希望有两个具有相同记录的dataTable,您至少应为每个表中的选定记录分配different array/list,如果您不想同时触发这两个事件,请将它们放在different forms中只按一下commandButton ......