当列= 4行= 1时,<p:commandButton>在p:dataGrid内部不起作用

时间:2019-08-29 11:53:19

标签: jsf primefaces datagrid commandbutton

我只想为p:dataGrid中列表中的每个项目添加p:commandButton。

  

但是,当我从属性p:dataGrid设置column = 4,rows = 1时。在列表的其余部分(列表中的第一项除外),我再也无法从commandButton获取值。

尝试更改为h:commandButton,p:commandLink,ajax = false;

<p:dataGrid var="list" value="#{myBean.listCompany}" columns="4" layout="grid"rows="1" paginator="true" paginatorPosition="bottom" paginatorTemplate="{PreviousPageLink} {NextPageLink} ">

<div class="card" style="height: 350px">
  <p:column>    
     <p:panel>
         <h:panelGrid columns="1">
        <p:commandButton value="Choose" action="#{myBean.selectCompany(list.companyName)}">
        </p:commandButton>
      </h:panelGrid> 
      </p:panel> 
     </p:column>
  </div>
</p:dataGrid>
  

基于此,https://knowles.co.za/primefaces-actions-not-firing-in-last-rows-of-datagrid/

     

快速解决方案只是正确设置行数,以填充您拥有的列数。只要行数是列数的倍数(例如2列,6行),就可以了。

但是,这不是我想要的解决方案,我需要显示4列1行的p:dataGrid。

1 个答案:

答案 0 :(得分:0)

如果我正确地想要在一行#{myBean.listCompany}中显示4个元素,则应该设置colums="4"rows="4"

这种方式rowscolumns的倍数,并且乘数是1

这里的行似乎是#{myBean.listCompany}中每页要显示的元素总数。如果这与多个列不匹配,则呈现和组件输入处理之间似乎存在某种不匹配。

您可以添加一个rowIndexVar="rowIndex"并将其与每个元素一起输出,以显示dataGrid中的哪一行。

<p:dataGrid var="list" value="#{myBean.listCompany}" columns="4"
    layout="grid" rows="4" paginator="true" paginatorPosition="bottom"
    paginatorTemplate="{PreviousPageLink} {NextPageLink} " rowIndexVar="rowIndex">

    <div class="card" style="height: 350px">
        <p:column>
            <p:panel>
                <h:panelGrid columns="1">
                    <p:commandButton value="Choose Row #{rowIndex}"
                        action="#{myBean.selectCompany(list.companyName)}">
                    </p:commandButton>
                </h:panelGrid>
            </p:panel>
        </p:column>
    </div>
</p:dataGrid>