[英]Recurring values in List<String> in Constructor java
示例.java
public class Sample {
static List<Object> list1 = new ArrayList<Object>();
static List<String> list = new ArrayList<String>();
private String value;
private String type;
static List<String> types = new ArrayList<String>();
public Item() throws ParseException {
JsontoList j = new JsontoList();
// types = Arrays.asList("green", "yellow", "red");
array = j.getarray();
list1 = j.toList(array);
list = j.getList(array);
types=list;
}
public List<String> getTypes() {
return types;
}
//public void setTypes(List<String> types) {
//this.types = types;
//}
使用上面的代码..我能够成功显示一个Bootsfaces表。点击添加命令按钮..文本字段和下拉列表在每列中一一添加,输入值保存在JSON中。 但问题是..无论何时点击ADD .. 以及 TextField 和 Dropdown..数据库中的 Dropdown 值每次也会被添加,从而产生许多值。
虽然我尝试不从项目构造函数中的数据库访问下拉值......但这些值没有被加载到网页中,除了在构造函数中。
请建议任何其他方法。任何帮助将不胜感激。提前谢谢。
我已经得到了解决方案,这奏效了-
在Item.java 中
public Item() throws ParseException {
JsontoList j = new JsontoList();
array = j.getarray();
list1 = j.toList(array);
list = j.getList(array);
List<String> types = new ArrayList<String>();
types = list;
//Added this piece of code below
Set<String> hs = new HashSet<>();
// add elements to List types, including duplicates
hs.addAll(types);
types.clear();
types.addAll(hs);
}
为了删除集合中的重复项,我们应该考虑为什么我们使用允许重复项的集合。 删除重复元素的最简单方法是将内容添加到 Set(不允许重复),然后将 Set 添加回 ArrayList。
我只能猜测(因为我不知道如何编译您的源代码),但是有一条非常可疑的线路。 看看Item
的@PostConstruct
方法。 它一遍又一遍地初始化静态变量types
。 这可能是读取数据库并将结果添加到已经存在的数组types
。
通常,我建议在使用静态变量时要非常小心。 它们只需初始化一次。 实际上,多次初始化静态变量会导致各种奇怪的错误。 您必须记住,JSF 应用程序总是被许多用户使用。 换句话说,有许多线程访问一个且唯一的静态变量。 如果用户 A 修改了用户 B 刚刚读取的静态变量,会发生什么情况? 最低限度的保护是synchronized
块以及检查变量是否已经初始化。
2017 年 1 月 10 日更新:生成的源代码大致如下:
public class Item {
private static List<String> types = null;
public Item() throws ParseException {
synchronized(types) {
if (null==types) {
JsontoList j = new JsontoList();
String array = j.getarray();
types = j.getList(array);
}
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.