У меня есть таблица данных простых лиц, которая использует LazyDataModel вместо Collection.
Мне нужно реализовать кнопку, которая создает новую строку в таблице (пустая строка в последней строке фактической страницы в datatable).
Я попытался добавить.
@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>
РЕДАКТИРОВАТЬ:
мой код не создает новую строку.