我遇到以下代码的问题:
<rich:select value="#{MyBean.selectedItems}" id="mss" defaultLabel="select" >
<f:selectItems value="#{MyBean.availableItemList()}var="selectedItem" />
<f:validator validatorId="util.MyValidator"/>
</rich:select>
第一次加载页面时效果很好但是当我从下一页导航回来时它失败并且无法再次获取值,列表似乎是空的。 availableItemList()方法如下:
public List<String> availableItemList()
throws NoSuchMethodException, IllegalAccessException{
try {
return ( (ConcurrentHashMap<String,MyData>)MyDataHandler.getFileData()).get(network).getItemList();
} catch(NullPointerException e) {
List<String> tmp = new ArrayList<String>();
tmp.add("asd");
return tmp;
}
正如我所说,当我第一次加载页面时它工作正常(它从datahandler返回与所选网络相关的项目),但在导航后,try部分似乎失败并且它会在catch中抛出异常消息。如果我只是从另一个页面按下浏览器的后退按钮,我可以看到项目并选择一个但是当我按下提交按钮时它会失败并且捕获部分再次出现错误消息。
我会尽力说清楚,但由于公司机密和blabla,我无法复制整个代码。因此Datahandler从XML文件中获取数据(包含网络数据)并将其存储在
中 protected static ConcurrentHashMap<String,?> fileData
它也有吸气剂和固定剂:
public static ConcurrentHashMap<String, ?> getFileData() {
return NetworkDataHandler.fileData;
}
网络数据如下所示:
private String networkName;
private List<String> mssList;
使用getter和setter。