从像a这样的迭代组件中删除行时<p:dataTable>,如果删除了最后一页中的所有行,则需要将当前页面重置为其前一页面.这是不幸的是没有自动在<p:dataTable>有LazyDataModel<T>.
语言上,如果一个数据表包含11页,每页10行,并且第11页上的所有行,即最后一行都被删除,它应该自动获得第10页(即前一页),但这不会自动发生(当前页面保持静止(第11个),就像数据表本身被清空一样),除非在关联的辅助bean中的某处显式编码.
非正式地,相应的伪代码段看起来如下所示.
if (rowCount <= (ceiling)((first + 1) / pageSize) * pageSize - pageSize) {
first -= pageSize;
}
Run Code Online (Sandbox Code Playgroud)
first页面偏移(以...开头0)在哪里,pageSize表示每页的行数,并rowCount指示关联的数据存储/数据库中的总行数.
实际上:
@Override
public List<Entity> load(int first, int pageSize, List<SortMeta> multiSortMeta, Map<String, Object> filters) {
// ...
int rowCount = service.getRowCount();
setRowCount(rowCount);
// ...
if (pageSize <= 0) {
// Add an appropriate FacesMessage.
return new ArrayList<Entity>();
} else if (first >= pageSize …Run Code Online (Sandbox Code Playgroud) 我在MySQL数据库中有一个表.不幸的是,GlassFish Server中的JAAS身份验证/授权需要一个复合主键.
mysql> desc group_table;
+---------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------------+--------------+------+-----+---------+-------+
| user_group_id | varchar(176) | NO | PRI | NULL | |
| group_id | varchar(15) | NO | PRI | NULL | |
+---------------+--------------+------+-----+---------+-------+
2 rows in set (0.05 sec)
Run Code Online (Sandbox Code Playgroud)
该表包含以下格式的数据.
mysql> select * from group_table;
+-------------------------+------------+
| user_group_id | group_id |
+-------------------------+------------+
| you123@gmail.com | ROLE_ADMIN |
| you123@gmail.com | ROLE_USER |
| you123@ymail.com | ROLE_USER |
| …Run Code Online (Sandbox Code Playgroud) 我有覆盖primefaces lazydatamodel加载的问题.加载方法的错误点.我正在使用primefaces 5.0.在Jboss Developer Studio 7.1中工作
private LazyDataModel<City> mdlCityList;
@PostConstruct
public void init() {
try {
this.mdlCityList = new LazyDataModel<City>() {
private static final long serialVersionUID = 1L;
@Override
public List<City> load(int first, int pageSize,
String sortField, SortOrder sortOrder,
Map<String, String> filters) {
mdlCityList.setRowCount(cityFacade.count(filters));
return cityFacade.getResultList(first, pageSize, sortField,
sortOrder, filters);
}
};
mdlCityList.setRowCount(cityFacade
.count(new HashMap<String, String>()));
} catch (Exception e) {
System.out.println("Exception in CityListProducer " + e);
}
}
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,我正在实现@Override,但它仍然指出:
new LazyDataModel(){}类型的方法load(int,int,String,SortOrder,Map)必须覆盖或实现超类型方法