Other converters -
Length Converter
public class Car { private String name; private String other; public Car(String name, String other) { this.name = name; this.other = other; } //Getters and Setters }
public class DataModel extends LazyDataModel<Car> { List<Car> listVals; private List<Car> datasource; private int count = 200; private int backCount = 200; private String rowString = ""; private static final long serialVersionUID = 1L; public DataModel() { datasource = new ArrayList<>(); this.setRowCount(1000); } //Getter and Setter for rowString and listVals @Override public Car getRowData(String rowKey) { try { for (Car listVal : listVals) { if (listVal.getName().equals(rowKey)) { return listVal; } } } catch (ArrayIndexOutOfBoundsException ex) { ex.printStackTrace(); } return null; } @Override public Object getRowKey(Car car) { return car.getName(); } @Override public List<Car> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String, Object> filters) { listVals = new ArrayList<>(); System.out.println("loading"); int end = (count + 50); for (int i = count; i < end && count <= 5000; i++, count++) { listVals.add(new Car("lamborghini" + count, "other" + count)); } datasource.addAll(listVals); return listVals; } public void loadPreCar() { listVals = new ArrayList<>(); System.out.println("loading pre"); int end = backCount; rowString=""; for (int i = backCount - 50; i < end && backCount >= 0; i++, backCount--) { listVals.add(new Car("lamborghini" + i, "other" + i)); } datasource.addAll(0, listVals); for (int i = 0; i < listVals.size(); i++) { Car car = listVals.get(i); rowString = rowString + "<tr class=\"ui-widget-content ui-datatable-even\" role=\"row\" data-ri=\"" + i + "\">" + "<td role=\"gridcell\">" + car.getName() + "</td>" + "<td role=\"gridcell\">" + car.getOther() + "</td>" + "</tr>"; i++; car = listVals.get(i); rowString = rowString + "<tr class=\"ui-widget-content ui-datatable-odd\" role=\"row\" data-ri=\"" + i + "\">" + "<td role=\"gridcell\">" + car.getName() + "</td>" + "<td role=\"gridcell\">" + car.getOther() + "</td>" + "</tr>"; } } }
import java.io.Serializable; import javax.annotation.PostConstruct; import javax.enterprise.context.SessionScoped; import javax.inject.Named; import org.primefaces.model.LazyDataModel; @Named @SessionScoped public class DataBean implements Serializable { private static final long serialVersionUID = 1L; private String value; LazyDataModel<Car> data = null; public DataBean() { } public LazyDataModel<Car> getData() { return data; } public void setData(LazyDataModel<Car> data) { this.data = data; } public String getValue() { return value; } public void setValue(String value) { this.value = value; } @PostConstruct public void init() { data = new DataModel(); } }
<h:form id="mainForm"> <pf:growl id="growl"/> <pf:panel> <pf:dataTable var="car" scrollable="true" liveScroll="true" scrollHeight="300" scrollRows="50" value="#{dataBean.data}" id="carTable" lazy="true" > <pf:column headerText="Name"> <h:outputText value="#{car.name}" /> </pf:column> <pf:column headerText="Other"> <h:outputText value="#{car.other}" /> </pf:column> </pf:dataTable> </pf:panel> <h:inputHidden value="#{dataBean.data.rowString}" id="rowString"/> <pf:remoteCommand name="myRemote" actionListener="#{dataBean.data.loadPreCar()}" oncomplete="addRows()" update="rowString" /> </h:form>
<script type="text/javascript"> /* <![CDATA[ */ var lastScrollTop = 0; var delay = (function() { //Adding delay var timer = 0; return function(callback, ms) { clearTimeout(timer); timer = setTimeout(callback, ms); }; })(); $(document).ready(function() { $('#mainForm\\:carTable .ui-datatable-scrollable-body').on('scroll', null, function() { var scrollLocation = $('#mainForm\\:carTable .ui-datatable-scrollable-body').prop('scrollTop'); if (scrollLocation < 10) { var scrollB = $('#mainForm\\:carTable .ui-datatable-scrollable-body') if (scrollB.scrollTop() < lastScrollTop) { delay(function() { myRemote(); }, 300); } lastScrollTop = scrollB.scrollTop(); } }); }); function addRows() { var rows = $('#mainForm\\:carTable .ui-datatable-scrollable-body table tr'); for (i = 0; i < rows.length; i++) { var attrVal = parseInt(rows[i].getAttribute('data-ri')) + 50; rows[i].setAttribute('data-ri', attrVal); } var firstRow = $('#mainForm\\:carTable .ui-datatable-scrollable-body table tr:first'); var rowHeight = firstRow.height(); firstRow.before(document.getElementById('mainForm:rowString').value); var scrollB = $('#mainForm\\:carTable .ui-datatable-scrollable-body') scrollB.scrollTop('' + rowHeight * 50); lastScrollTop = rowHeight * 50; } /* ]]> */ </script>