2010-05-18 96 views
0

我有一个情况,我有记录列表说10,000,我正在使用数据表,我正在使用分页(每个显示10条记录)。我希望把放在会议为列表:JSF会话问题

facesContext........put("mylist", mylist); 

而在MYLIST的干将,我有

public List<MyClass> getMyList() { 
    if(mylist== null){ 

     mylist= (List<MyClass>) FacesContext......getSessionMap().get("mylist"); 
    } 

    return mylist; 
} 

现在的问题是whene曾经我对分页按钮点击进入第二页,只显示第一条记录, 我知道我错过了一些东西,并且我有几个问题:

是否将列表放入会话的方式正确。 这是我应该在我的情况下调用列表的方式。

Thnaks提前...

+0

我们可以看到JSF代码吗?我们需要知道你的分页是如何实现的。 – Naganalf 2010-05-18 19:44:29

回答

1

完全不同的东西:我强烈建议把那些10.000记录会话范围。这显然是低效的。如果有100个用户正在访问您的数据表,那么这些记录将被复制到每个用户的内存中。这没有意义。只要将它们留在数据库中,并相应地编写SQL查询,它就会按照请求准确返回您想要显示的行。这是数据库设计的工作。如果数据模型设计得很好(WHERE中涉及的列的索引以及必要的ORDER BY条款),那么它肯定比将每个访问者的Java内存中的整个表拖出更快。

您可以在this article中找到更多见解和代码示例。

+0

Thks Balusc,还有一个问题,即使我将从数据库提取的行数限制为50个可以这么说。并且可以说我的最大用户数也低于10. 如果我使用分页,即每页10条记录,单击下一个分页按钮将导致列表为空rt? 我该如何克服这个问题?我不能实现TOmaHawk的 property.Thanks。 – user234194 2010-05-18 21:34:28

+0

然后解决导致无法实现的问题,以便无论如何可以实现它,*或*将bean放入会话范围。唯一需要注意的是,这反映了同一会话中的所有选项卡/窗口。在某些情况下,这可能是个不错的选择。 – BalusC 2010-05-18 21:42:01