无法处理primefaces数据表中的扩展行数据

时间:2014-03-04 13:41:47

标签: jsf jsf-2 primefaces datatable expansion

这是我的xhtml代码,包含使用行扩展的数据表。使用primefaces 4.0,jsf mozarra 2.2.4

<p:dataTable id="myTable" value="#{myBean.lazyModel}" var="dd"
    rowKey="#{dd.hashCode()}" paginator="true"
    selection="#{myBean.myModel.selectedRecords}" rows="#{myBean.pageSize}"
    paginatorPosition="top"
    paginatorTemplate="{CurrentPageReport}  {FirstPageLink}   
                       {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink}             {RowsPerPageDropdown}"
    rowsPerPageTemplate="5,10,20,50,100" widgetVar="dataTable"
    currentPageReportTemplate="(Number of Records: {totalRecords})"
    lazy="true">  
     <p:ajax event="rowToggle" listener="#{myBean.onRowToggle}" process="@this"/>
<p:column>
    <p:rowToggler />
</p:column>

<p:column selectionMode="multiple" id="select" />

<p:column id="cpn" headerText="#{messages['cpn']}"
    filterMatchMode="contains" sortBy="#{dd.cpn}" filterBy="#{dd.cpn}">
    <p:inputText id="cpnid" value="#{dd.cpn}" />
</p:column>
<p:column id="user" headerText="#{messages['user']}"
    filterMatchMode="contains" sortBy="#{dd.number}"
    filterBy="#{dd.number}">
    <p:inputText id="addid" value="#{dd.number}" />
</p:column>
   :
   :    
<p:rowExpansion id="rowExpansion">
    <p:panelGrid>
        <p:row>
            <p:column>
                <h:outputText value="#{messages['name']}" />
            </p:column>

            <p:column>
                <p:inputText id="name" name="txtBox" value="#{dd.name}" />
            </p:column>

            <p:column>
                <h:outputText value="#{messages['ageGroup']}" />
            </p:column>

            <p:column id="agecol">
                <p:selectOneMenu id="agegrp" value="#{dd.agegrp}">
                    <f:selectItem itemLabel="21-25" itemValue="21-25" />
                    <f:selectItem itemLabel="26-30" itemValue="26-30" />
                </p:selectOneMenu>
            </p:column>
        </p:row>
    </p:panelGrid>
    </p:rowExpansion>
 </p:dataTable>   

现在,我展开了一行并输入了名称并选择了年龄组并折叠了该行。如果我重新展开同一行,我看不到我输入的值。当我在折叠行时调试时使用null参数调用name字段和age grp字段setter。

如果我删除了ajax rowToggle事件,那么在行崩溃时没有向服务器发送请求。

我发现的所有示例都只显示行扩展的静态数据。

有没有办法处理用户在行崩溃时输入的数据?

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:1)

我遇到了同样的问题。您是否在对话框中使用此数据表?

在父对话框中尝试设置dynamic=false。 动态对话框可能会覆盖您的ajax请求

答案 1 :(得分:0)

尝试在每个输入表单中添加<p:ajax partialSubmit="true" />

答案 2 :(得分:0)

只需从子表中删除sortBy即可。 它对我很有用。

或者, 在xhtml文件(MasterDataTable)中:

std::cout << typeid(static_cast<void(A::*)(int)>(&A::operator())).name() << std::endl;

在视图文件中:

<p:ajax event="rowToggle" listener="#{superView.ontoggle()}" />