Primefaces数据表LazyDataModel创建新行

时间:2018-09-17 15:08:36

标签: jsf primefaces datatable lazydatamodel

我有一个primefaces数据表,该表使用LazyDataModel而不是Collection。

我需要实现一个在表中创建新行的按钮(数据表中实际页面的最后一行中的空行)。

我尝试添加。

@Component("table")
@Scope("session")
public class TablaPaginada implements Serializable {
    private LazyDataModel<User> users;
    @PostConstruct
    private void init() {
        usuarios = new LazyDataModel<User>() {
            private static final long serialVersionUID = 8885722005055879976L;
            @Override
            public List<User> load(int first, int pageSize, String sortField,
                    SortOrder sortOrder, Map<String, Object> filters) {
                List<User> data = getUsers(first, pageSize, sortOrder, filters);
                return data;
            }
        };
        users.setRowCount(totalRowUsers());
    }
    public void newRow() {
        //I would do this if it was List instead LazyDataModel
        //this.users.add(new User());
        users.getWrappedData().add(new User()); //this does not work.
    }
}

这将是xhtml代码:

<h:form>
<p:dataTable rowsPerPageTemplate="5,10,15" value="#{table.users}" var="user" paginator="true"
             paginatorTemplate="{RowsPerPageDropdown} {FirstPageLink} {PreviousPageLink} {CurrentPageReport} {NextPageLink} {LastPageLink}"
             rows="5" lazy="true">

    <p:column headerText="id" sortBy="#{user.id}" filterBy="#{user.id}">
        <h:outputText value="#{user.id}" />
    </p:column>
    <p:column headerText="name" sortBy="#{user.name}" filterBy="#{user.name}">
        <h:outputText value="#{user.name}" />
    </p:column>
    <p:column headerText="lastName" sortBy="#{user.lastName}" filterBy="#{user.lastName}">
        <h:outputText value="#{user.lastName}" />
    </p:column>
    <p:column headerText="money" sortBy="#{user.money}" filterBy="#{user.money}">
        <h:outputText value="#{user.money}" />
    </p:column>
</p:dataTable>
<p:commandButton value="new row" action="#{table.newRow()}" update="@form"/>
</h:form>

编辑:

我的代码没有创建新行。

1 个答案:

答案 0 :(得分:1)

从PF文档中:<p:commandButton value="Add" actionListener="#{dtBasicView.addCar}" oncomplete="PF('dt').addRow()" process="@this"/>

对于Lazy Datatable,您可能会遇到此问题,该问题具有解决方法:https://github.com/primefaces/primefaces/issues/3901