如果我在数据表之外放置一个输入组件,那么支持 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>
但是,如果我将该输入组件放置在数据表的表头中,则支持 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>
为什么是这样?有没有办法使后者的设置工作?