2014-03-04 41 views
0

这是我的xhtml代码,其中包含使用行扩展的数据表。使用primefaces 4.0,JSF mozarra 2.2.4无法在primefaces数据表中处理扩展行数据

<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> 

现在我扩大一行,输入的名称,并选择年龄组和折叠行。如果我重新展开同一行,我看不到我输入的值。当我在折叠行上调试时使用空参数调用名称字段和年龄grp字段设置器。

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

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

有没有什么方法可以处理在行折叠中输入的用户数据?

任何帮助,高度赞赏。

回答

0

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

+0

partialSubmit就是限制后的数据只能在过程属性述各组分。它对我的情况有什么帮助? –

+0

“如果启用partialSubmit,则只有在服务器端将部分处理的组件的数据才被序列化。”您当前的对象将更新,通常当您重新展开该行时,您将看到您输入的值,那就是您想要的? –

+0

H我意识到这一点,并试图也没有用。如果他们在组件上添加ajax请求也会对组件产生很大的帮助。但是我认为他们对此感兴趣。请参阅http://forum.primefaces.org/viewtopic.php?f=3&t=9161&sid=bb9d1daed1415d214b1971626e23f0b9#p75573 –

1

我有同样的问题。你是否在对话框中使用这个数据表?

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

0

只需从子表中删除sortBy。 这对我很有用。

或者, 在XHTML文件(MasterDataTable):

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

上查看文件:

public void ontoggle() { 
    UIComponent table = FacesContext.getCurrentInstance().getViewRoot().findComponent("form:MasterDataTable:ChildDataTable"); 
    if (table != null) { 
     table.setValueExpression("sortBy", null); 
    } 
}