2

如果我在数据表之外放置一个输入组件,那么支持 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>

为什么是这样?有没有办法使后者的设置工作?

4

1 回答 1

2

我可以重现您的问题,并且当我摆脱<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>. 我肯定会向 PrimeFaces 人员报告。

于 2012-08-06T17:40:11.400 回答