标签: lazydatamodel

避免重置在托管bean中重复页面边界(p:dataTable)的样板代码

从像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)

datatable jsf primefaces lazydatamodel

12
推荐指数
0
解决办法
245
查看次数

当存在将多个列组合为行键的复合主键时,覆盖/实现getRowKey()和getRowData()方法

我在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)

datatable jsf composite-key primefaces lazydatamodel

5
推荐指数
1
解决办法
6699
查看次数

Primefaces lazydatamodel加载覆盖不起作用

我有覆盖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)必须覆盖或实现超类型方法

jsf primefaces jsf-2 lazydatamodel

0
推荐指数
1
解决办法
6467
查看次数