我有一个JSF表,它使用Hashmap存储选定的复选框。我的问题是:是否可以使用2D Java数组而不是Hashmap来存储密钥?
编辑我使用此代码来存储选定的键。如何为Map
重写此代码?
private HashMap<String, Boolean> selected = new HashMap<>();
// send the list
public Map<String, Boolean> getselected() {
return selected;
}
我的想法是创建2D数组(它将用于映射),它将存储页面数和页面上的列表。例如,100页x 10键。
编辑2
我使用延迟加载创建了JSF表,该表从Oracle获取数据。JSF工作得既好又快。我面临的问题是,当我试图创建“全选”复选框时,该复选框会接受所有Kay并将键存储到哈希映射中。稍后,这些键将用于SQL查询,以删除用户选择的行。我创建了包含10000行的数据库表,并将它们显示到JSF表中。当我点击它们时,我用10000创建了hashmap。对于这种尺寸,性能相对较好。我测试了删除它们-我创建了Java方法,该方法使用生成的哈希映射,并使用存储在哈希映射中的键删除数据库行。这是演示,但可以进行一些代码优化。最大的问题是可伸缩性。我用1000000个键测试了hashmap,它可以工作,但速度非常慢。我需要设计JSF表来处理非常大的数据。我认为解决方案是使用2D数组(本例中我们称之为2D数组)。我将这样解释我的想法:例如,我将有100页的JSF表。每页将有10行。当我选择所有行时,我将有1000个键进入标准的hashmap。在2D数组解决方案中,我可以创建包含100个元素的数组,当我在页面之间切换时,我只有10行,这将由分页代码生成。当我选择所有数据库行时,我只能将可见行键插入到2D数组中。我将数组中的其他位置替换为,例如,为了知道有什么东西。当我按下delete按钮时,Java代码将知道所有元素都“实际上”被选中。是否有更好、更简单的解决方案?
Map
允许通过put()
方法进行动态扩展,因此您无需在使用前准备它,但数组不允许动态扩展,必须事先手动准备固定大小。
如果从技术上讲,您只需要1D的成对集合,那么2D数组很难准备,也没有任何意义。如果使用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>
然而,如果您引入分页或过滤或动态添加/删除行,这可能会造成严重破坏。您需要每次手动调整数组的大小和排序。由项目自己的id
而不是行索引键控的Map
要容易得多。
更新时间:
布尔[]的“全选”应简单到
Arrays.fill(checked, Boolean.TRUE);
我在我的i3笔记本电脑上测试了它,它在20毫秒内完成了1000000个条目。您的性能问题可能应该在持久性层中找到。
问题内容: 是否可以更新页面的不是JSF组件的部分? 例如,我可以更新纯HTML 还是需要将其包装在JSF组件中? 问题答案: 是否可以更新页面的不是JSF组件的部分? 否。待更新组件必须由提供,以便JSF可以找到它们,对其进行调用,捕获生成的HTML输出,并将其传递回ajax响应,以便JavaScript可以使用它更新HTMLDOM树。 。纯HTML元素未在JSF组件树中表示为真实实例,因此JS
问题内容: 我想知道是否可以在Django模型中存储数组? 我问这个问题是因为我需要在一个字段中存储一个数组(例如[1,2,3]),然后能够搜索特定的数组并与之匹配,或者通过它的可能组合来进行匹配。 我当时正在考虑将该数组存储为s中的字符串,然后在需要搜索内容时,将值(通过过滤其他模型获得)与’[‘,’]’和’,’连接在一起,然后使用带有生成字符串。问题在于,我将必须生成每种可能的组合,然后逐个过
我想使用一个存储库从不同的表中选择实体。我使用Spring Data JPA,并有自己的查询方法: 第一个问题,是否可以通过某种方式传递表名?因为现在我正在对表名进行编码。 接下来我有两个子类EntityOne和EntityTwo。它们的字段(列)与BaseEntity相同,但它们必须在不同的表中。 我尝试过为BaseEntity使用@Mep dSuperclass注释。但它不起作用,我有一个例外
阅读文档时,并不十分清楚。 我想要的是能够存储和检索简单的json文档。使用CloudSearch,似乎可以以SDF格式存储文档,然后搜索它们,但它只返回文档ID和指定字段的一小部分(我认为是200个字符)。 有没有一种方法来检索完整的文档ID只是使用CloudSearch?还是打算作为搜索和使用主存储服务的附加工具?
问题内容: 是否可以用来捕获任意一组可选参数? 例如,以下两个都应被接受为输入: 先验的 我不知道会指定哪些可选参数,但是会相应地处理它们。 问题答案: 这是一种黑客手段,但效果很好: 检查未添加的参数并添加它们 例如: 那么结果将是
我在JPA实体上拥有以下财产: 如果置信度设置为“0.000”,例如:setConfidence(新的BigDecimal(“0.000”));然后实体被持久化到数据库中,然后从数据库中取回,取回的值将失去其精度和规模,仅为0。 数据库模式是在部署Web应用程序时由JPA/Eclipselink创建的。 我的环境是EclipseLink 2.3.2。v20111125-r10461,Oracle