2012-05-25 32 views
1

我有一个JSF表,它使用Hashmap存储选定的复选框。我的问题是:是否有可能使用2D Java数组来存储密钥而不是Hashmap?是否可以使用2D数组来存储JSF复选框?

编辑 我使用此代码来存储选定的键。 Map这个代码如何被重写?

private HashMap<String, Boolean> selected = new HashMap<>(); 

    // send the list 
    public Map<String, Boolean> getselected() { 
     return selected; 
    } 

我的想法是创建一个二维数组(它将被用于MAP)将存储的页数和页面上的列表。例如100页×10个键。

编辑2

我创建迟缓装载,其从Oracle取数据JSF表。 JSF工作得非常好,速度很快。我面对的问题是当我试图创建select all复选框,其中所有的kays和密钥存储到hashmap。稍后,这些键将用于SQL查询以删除用户选择的行。 我创建了具有10000行的数据库表并将它们显示到JSF表中。当我点击它们时,我创建了hashmap和10000.对于这个尺寸,性能相对较好。我测试过删除它们 - 我创建了Java方法,它使用生成的hashmap并使用存储在hashmap中的密钥删除数据库行。这是显示,但可以做一些代码优化。 最大的问题是可扩展性。我用1 000 000个键测试了hashmap - 它有效,但速度非常慢。我需要设计JSF表来处理非常大的数据。 我认为解决方案是使用二维数组(我们称之为这个例子)。我将以这种方式解释我的想法: 例如,我将拥有100页的JSF表。每个页面将有10行。进入标准hashmap当我选择所有行时,我将拥有1000个密钥。 在二维数组解决方案中,我可以创建包含100个元素的数组,当我在页面之间切换时,将只有10行将从分页代码生成。当我选择所有数据库行时,我只能将可见行键插入到二维数组中。将其他位置放入我替换的阵列中,例如1以便知道有什么。当我按下删除按钮时,Java代码将知道所有元素都是“虚拟”选择的。有更好更简单的解决方案吗?

+0

你为什么不使用简单的数组列表呢? (保持简单...) – Daniel

+0

我想用延迟加载进行实验。 – user1285928

+0

@Daniel你知道这可能吗? – user1285928

回答

4

Map允许通过put()方法的动态扩展,所以不需要在使用前制备,但阵列不允许动态和3​​12104必须手动具有固定大小预先准备。

二维数组很难做好准备,如果技术上只想要一对一对的二维数组,就没有意义。如果您使用1D数组并将该表的行索引用作数组索引,则会更容易。

E.g.

private List<Item> items; 
private Boolean[] checked; 

@EJB 
private ItemService service; 

@PostConstruct 
public void init() { 
    items = service.list(); 
    checked = new Boolean[items.size()]; 
} 

<h:dataTable binding="#{table}" value="#{bean.items}" var="item"> 
    <h:column> 
     <h:selectBooleanCheckbox value="#{bean.checked[table.rowIndex]}" /> 
    </h:column> 
</h:dataTable> 

然而,这可能可能去破坏,如果你介绍分页或过滤或动态添加/删除行。您需要手动摆弄数组的大小并每次订购。 A Map这是项目自己的id,而不是行索引键是如此容易,然后。


更新

A “全选” 一Boolean[]应该是越简单

Arrays.fill(checked, Boolean.TRUE); 

我测试了它在我的i3笔记本电脑,它在20毫秒完成1,000,000项。应该在持久层中寻找你的性能问题。

+0

我更新了帖子。你能告诉我我的代码必须如何编辑。我不知道JSF能够在这种情况下工作与我的具体实施。 – user1285928

+0

你可以在这里找到一个具体的开球示例如何正确使用'Map':http://stackoverflow.com/questions/2524514/how-to-use-jsfs-hselectbooleancheckbox-with-hdatatable-to-create-one- object-p/2524832#2524832 – BalusC

+0

我建议从头开始。也许如果我告诉你一切,你可以告诉我什么是最好的解决方案。我会写入帖子。 – user1285928

相关问题