这是我的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事件,那么在行崩溃时没有向服务器发送请求。
我发现的所有示例都只显示行扩展的静态数据。
有没有办法处理用户在行崩溃时输入的数据?
非常感谢任何帮助。
答案 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()}" />