我只想为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。
答案 0 :(得分:0)
如果我正确地想要在一行#{myBean.listCompany}
中显示4个元素,则应该设置colums="4"
和rows="4"
。
这种方式rows
是columns
的倍数,并且乘数是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>