<p:column headerText="serial no">
<h:outputText value="#{helloBean.serialNo}"></h:outputText>
</p:column>
<p:column headerText="name">
<p:inputText value="srikanth"></p:inputText>
</p:column>
</p:dataTable>
上面是由序列号为1到10的10个对象组成的列表。数据表呈现为10行,第一列正确显示序列号,但所有行中的第二列显示为空,即使我硬编码了列值。
这背后的原因是什么!!!!
第二列也使用h:outputText标记,这将呈现值。如果要提供输入,请使用p:inputText标记。
<p:column headerText="name">
<h:outputText value="srikanth"></h:outputText>
</p:column>
我认为JSF中dataTable的工作方式是在表级别定义了两个重要的属性value和var,这里value是要迭代的POJO的集合/数组列表,val是列表/POJO中的一个项目。在使用JSF组件值属性的表列中,您可以访问POJO的特定属性的值并显示它们的值。表中显示的行数将取决于arrayList的大小。例如,在不同列中具有不同员工属性的Employee表。所以一个好方法似乎是迭代表的value属性并相应地呈现列。
在这里,由于所有列的name都显示相同的常量值,因此可以使用bean中定义的字符串常量,并从组件的value属性访问它,它应该可以工作。
使用有点令人惊讶
<p:inputText value="srikanth"></p:inputText>
在页面上的dataTable外部会产生html代码<input type="text" value = "srikanth" ...>
,但在dataTable内部则不起作用。
在使用了列的页脚方面之后,我可以看到inputText值:
<p:dataTable>
<p:column >
<f:facet name = "header">name</f:facet>
<f:facet name="footer"><p:inputText value="srikanth"></p:inputText></f:facet>
</p:column>
</p:dataTable>
上面的代码可以在表的页脚中生成一个html <input value="srikanth"...>
。静态内容似乎更适合放在表列的页眉和页脚区域内,而实际内容应该通过dataTable的value和var属性提供。