在我的示例中,Primefaces dataGrid
的行数设置为5,列设置为2.渲染表显示6个项目。
这大部分都没有引起注意,直到我们意识到第6项上的按钮不起作用 - 很可能是因为它没有被绑定到某个事件?
作为一个最小的例子,使用XHTML(不显示h:head
等元素):
<h:body>
<h:form>
<p:dataGrid value="#{testBean.theStrings}" var="theString" rows="5" columns="2">
<p:commandButton action="#{testBean.printOut(theString)}" value="#{theString}"/>
</p:dataGrid>
</h:form>
</h:body>
和
的支持bean@ManagedBean
@SessionScoped
public class TestBean implements Serializable
{
private List<String> theStrings;
@PostConstruct
public void setup() {
System.out.println("Setting up array");
theStrings = new ArrayList<>();
for (int i = 0; i < 6; i++) {
theStrings.add(String.valueOf(i));
}
}
public List<String> getTheStrings()
{
return theStrings;
}
public void printOut(String theString) {
System.out.println(theString);
}
}
这将显示6个按钮,标记为0-5,但只有标记为5的按钮不会触发系统。
这里发生了什么?行不应该将项目数限制为5吗?将行数增加到6不会改变视觉输出,但最终按钮开始工作。
答案 0 :(得分:-1)
我遇到了同样的问题,并发现这是因为您的列是3,行是5,所以5/3 = 1.6666…经过测试,结果表明,如果行/列输出的是 Integer ,dataGrid
会很好地工作。
我不确定为什么 ,但这似乎可以解决问题。