Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf PrimeFaces数据表延迟加载被加载两次_Jsf_Jsf 2_Primefaces_Datatable_Lazy Loading - Fatal编程技术网

Jsf PrimeFaces数据表延迟加载被加载两次

Jsf PrimeFaces数据表延迟加载被加载两次,jsf,jsf-2,primefaces,datatable,lazy-loading,Jsf,Jsf 2,Primefaces,Datatable,Lazy Loading,问题是每次我尝试筛选表时,我的LazyDataModel实现中重写的方法load()都会被调用两次 我的LazyDataModel实现: public class LazyPostDataModel extends LazyDataModel<Post> { private List<Post> data; private final PostService postService; public LazyPostDataModel(PostS

问题是每次我尝试筛选表时,我的
LazyDataModel
实现中重写的方法
load()
都会被调用两次

我的
LazyDataModel
实现:

public class LazyPostDataModel extends LazyDataModel<Post> {

    private List<Post> data;
    private final PostService postService;

    public LazyPostDataModel(PostService postService) {
        this.postService = postService;
        data = new ArrayList<>();
    }

    @Override
    public Post getRowData(String rowKey) {
        Long id = Long.valueOf(rowKey);
        for (Post p : data) {
            if (p.getId().equals(id))
                return p;
        }
        return null;
    }

    @Override
    public Object getRowKey(Post post) {
        return post.getId();
    }

    @Override
    public List<Post> load(int first, int pageSize, String sortField,      SortOrder sortOrder, Map<String,Object> filters) {
        PostFilter filter = new PostFilter(filters, first, pageSize);
        FilteredDataModel<Post> postDataModel =    postService.findFilteredList(filter);
        data = postDataModel.getData();
        this.setRowCount(postDataModel.getCount().intValue());
        return data;
    }
}

这是因为你有

filterBy="#{post.moderationApproved}"


这两种方法都将调用过滤器一次,并导致load方法被调用两次。
仅使用其中一个。

检查是否多次调用了来自
BaseController
initSpecific()
)的重写方法本身。如果多次呼叫,可能存在不同的问题。谢谢您的帮助。不,
initSpecific()
它只是在
@postcontuct super.init()
中调用的一个特定init,因此表中没有太多模型。PrimeFaces:5.2,JSF:2.2
@Named("moderationPostController")
@SessionScoped
@Transactional(Transactional.TxType.REQUIRED)
public class ModeratioPostController extends BaseController implements Serializable {

    @Inject PostService postService;
    private LazyPostDataModel posts;

    // Selection
    private Post selected;

    @Override
    protected void initSpecific() {
        posts = new LazyPostDataModel(postService);
    }

    // Actions
    public void approve() {
        if (selected == null) return;

        Post post = postService.find(selected.getId());
        post.setModerationApproved(Boolean.TRUE);
        postService.edit(post);
    }

    public void reject() {
        if (selected == null) return;        

        Post post = postService.find(selected.getId());
        post.setModerationApproved(Boolean.FALSE);
        postService.edit(post);
    }

    public LazyPostDataModel getPosts() {
        return posts;
    }

    public void setPosts(LazyPostDataModel posts) {
        this.posts = posts;
    }

    public Post getSelected() {
        return selected;
    }

    public void setSelected(Post selected) {
        this.selected = selected;
    }

}
filterBy="#{post.moderationApproved}"
<p:selectOneButton onchange="PF('ModerationPostTable').filter()">