如果我将输入组件放置在数据表之外,则支持 bean 将使用输入进行更新,并且搜索工作正常,在数据表中正确显示结果。
<h:form>
<!-- ------- Calendar input component outside dataTable ------- -->
<p:calendar id="selectHireDate" value="#{backingBean.hireDateToSearch}" />
<p:dataTable id="employeeDataTable"
value="#{backingBean.employeeDataModel}" var="employee">
<p:columnGroup type="header">
<p:row>
<p:column>
<f:facet name="header">
Lorem Ipsum
</f:facet>
</p:column>
</p:row>
</p:columnGroup>
<p:column>
<h:outputText value="#{employee.hireDate}" />
</p:column>
</p:dataTable>
<p:commandButton value="Submit"
actionListener="#{backingBean.searchEmployees}"
update="employeeDataTable" />
</h:form>
但是,如果我将该输入组件放置在数据表的 header 中,突然间支持 bean 不再更新。 (我在 backingBean.setHireDateToSearch 上放置了一个断点,上面的代码会触发该断点,但下面的代码不会触发该断点。)
<h:form>
<p:dataTable id="employeeDataTable"
value="#{backingBean.employeeDataModel}" var="employee">
<p:columnGroup type="header">
<p:row>
<p:column>
<f:facet name="header">
<!-- ------- Calendar input component inside dataTable ------- -->
<p:calendar id="selectHireDate" value="#{backingBean.hireDateToSearch}" />
</f:facet>
</p:column>
</p:row>
</p:columnGroup>
<p:column>
<h:outputText value="#{employee.hireDate}" />
</p:column>
</p:dataTable>
<p:commandButton value="Submit"
actionListener="#{backingBean.searchEmployees}"
update="employeeDataTable" />
</h:form>
这是为什么呢?有没有办法让后一种设置起作用?
最佳答案
我可以重现你的问题,当我摆脱 <p:columnGroup>
时,它就得到了解决。周围<f:facet name="header">
无论如何,它本身在这个构造中没有多大意义。
<p:dataTable id="employeeDataTable" value="#{backingBean.employeeDataModel}" var="employee">
<f:facet name="header">
<p:calendar id="selectHireDate" value="#{backingBean.hireDateToSearch}" />
</f:facet>
<p:column>
<h:outputText value="#{employee.hireDate}" />
</p:column>
</p:dataTable>
(这仅显示第二个小行空 <p:column>
标题,您可以通过一点 CSS 隐藏它)
不确定这是由设计引起的还是由 decode()
中的某个错误引起的与 <p:dataTable>
关联的方法。我会 report PrimeFaces 人员可以确定。
关于jsf - PrimeFaces 数据表头中的输入不会更新支持 bean - 解决方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11832354/