【问题标题】:Primefaces: Table sorting and row editing don't work togetherPrimefaces:表格排序和行编辑不能一起工作
【发布时间】:2013-11-14 19:07:58
【问题描述】:

我创建了一个简单的 primefaces 4.0 表,支持行编辑和列排序。我创建了两个条目并将它们降序排序。现在,当我使用行编辑器更改一行的值时,保存该行后会被另一行的数据覆盖!当我重新加载表格时,一切都正常了。

这是所有步骤:

  1. 用Spring ROO创建一个简单的项目(只有一个实体,三个字符串字段)
  2. 在 pom.xml 中将 primefaces 设置为 4.0 版本,并将源代码更改为 primefaces 4.0。
  3. 为表格添加了行编辑和列排序。
  4. 启动服务器并输入所有值“1”的第一个条目和所有值“2”的第二个条目。
  5. 对任何列进行降序排序(结果:“2”在顶部,“1”在底部)
  6. 使用 RowEditor 编辑任何值并保存。
  7. 现在已编辑行的值会被视图中其他行的值覆盖。

这是我的 jsf 代码:

    <p:dataTable editable="true" id="list" value="#{customerBean.allCustomers}" var="customer" rendered="#{customerBean.dataVisible}" resizableColumns="false" paginator="true" paginatorTemplate=" {CurrentPageReport}  {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}" rowsPerPageTemplate="5,10,25,50" rows="10">
      <p:ajax event="rowEdit" listener="#{customerBean.onRowEdit}" update=":growlForm:growl" />
      <p:columns value="#{customerBean.columns}" var="column" columnIndexVar="colIndex"
                 sortBy="#{customer[column]}">
        <f:facet name="header">
          <h:outputText value="#{applicationBean.getColumnName(column)}" />
        </f:facet>
           <p:cellEditor>  
               <f:facet name="output"><h:outputText value="#{customer[column]}" /></f:facet>  
               <f:facet name="input"><p:inputText id="#{customer[column]}Input" value="#{customer[column]}" style="width:96%"/></f:facet>  
           </p:cellEditor> 
      </p:columns>
      <p:column style="width:6%">  
        <p:rowEditor />  
      </p:column>

这是服务器代码:

public void onRowEdit(RowEditEvent event) {
    this.setCustomer((Customer) event.getObject());
    this.persist();
}

这是 Roo、Primefaces、JSF 还是 JQuery 的错误??? 任何提示或解决方法?在不丢失当前排序和分页的情况下,在行编辑后刷新表格的最简单方法是什么?

谢谢!!! 亚历克斯

【问题讨论】:

    标签: jsf-2 primefaces


    【解决方案1】:

    在 primefaces 4.0 中,您的 sortBy 应该是这样的 sortBy="#{column}" 而不是

    `#{customer[column]}`
    

    【讨论】:

      【解决方案2】:

      您的 customerBean 必须是 ViewScoped,或者如果您有 sessionScoped,则需要像我的示例中那样:

       <p:dataTable id="settingsTbl" value="#{settingsBean.settingsList}" var="item" editable="true">
      

      .....

       public List<Settings> getSettingsList() {  
          if(settingsList==null){
              settingsList = settingsFacade.findAll();
          }
          return settingsList;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-25
        • 2013-09-24
        • 1970-01-01
        • 2021-08-17
        • 2019-04-29
        • 2016-11-05
        • 2014-07-19
        相关资源
        最近更新 更多