这是(Managed-Bean best practice)的扩展。我编写了一个AppProperties类,它定义了Class中的各种项目:
public class AppProperties implements Serializable {
private static final long serialVersionUID = 1L;
//contents of AppProperties Object
private String appRepID;
private String helpRepID;
private String ruleRepID;
private String filePath;
private Vector formNames;
//end content
private Session s;
private String serverName;
public String getAppRepID() {
return appRepID;
}
public void setAppRepID(String appRepID) {
this.appRepID = appRepID;
}
//rest if getters and setters
}
在我的bean中,我有以下内容:
import ca.wfsystems.core.AppProperties;
private final Map<String, AppProperties> internalMap = new HashMap<String, AppProperties>();
public ApplicationMap() {
this.buildMap(internalMap);
}
private void buildMap(Map<String, AppProperties> theMap) {
try{
AppProperties ap = null;
Session s = ExtLibUtil.getCurrentSession();
vwApps = s.getCurrentDatabase().getView("vwWFSApplications");
veCol = vwApps.getAllEntries();
ve = veCol.getFirstEntry();
tVE = null;
while (ve != null){
Vector colVal = ve.getColumnValues();
String tAppRepID = colVal.get(2).toString();
ap.setAppRepID(colVal.get(2).toString());
ap.setHelpRepID(colVal.get(3).toString());
ap.setRuleRepID(colVal.get(4).toString());
theMap.put(colVal.get(0).toString(), ap);
}
}catch(Exception e){
System.out.println(e.toString());
}finally{
Utils.recycleObjects(s,vwApps);
}
}
除了在ap.setAppRepID(colVal(2).toString())之外,一切似乎都没问题。有一个编译器错误&#34;空指针访问变量ap此时只能为空&#34; setAppRepID和setHelpRepID的代码是相同的,并且setHelpRepID或setRuleRepID没有编译器错误。我不确定问题是否在设置AppProperties ap = null尝试创建AppProperties ap = new AppProperties但它不是那样的。我认为我真的很接近这项工作,但......
感谢所有在我爬上JAVA斜坡时对我很有耐心的人。
答案 0 :(得分:1)
编译器错误是正确的,您的变量 ap 在此时只能为null。 请遵循
中的每个陈述AppProperties ap = null;
到
ap.setAppRepID(colVal.get(2).toString());
并且在任何时候都没有ap初始化为一个对象,它仍然是null。
您还会在setHelpRepID或setRuleRepID上看到编译器错误,但它不会打扰您,因为它已经是第一个语句的问题。你可以通过注释掉setAppRepID行来尝试这个,你应该在下一行看到相同的错误。
在AppProperties类中创建一个公共构造函数
public AppProperties() {};
然后尝试更改
AppProperties ap = null;
到
AppProperties ap = new AppProperties();
答案 1 :(得分:0)
它肯定是&#34; AppProperties ap = null&#34;线。当你说你试过&#34; AppProperties ap = new AppProprties&#34;时,你是否包括&#34;()&#34;最后(即&#34; AppProperties ap = new AppProperties()
&#34;)?看起来您的AppProperties bean具有默认的无参数构造函数,因此应该可以工作。特别是,从您的代码中猜测,我希望您能够在打开while循环之后将该行移动到该位置。
你还有一个等待的无限循环:你永远不会在while循环中将条目设置为下一个。如果您不使用OpenNTF Domino API,我建议使用这样的成语:
ViewEntry entry = veCol.getFirstEntry();
while(entry != null) {
Vector<?> colVal = ve.getColumnValues();
...
entry.recycle(colVal);
ViewEntry tempEntry = entry;
entry = veCol.getNextEntry();
tempEntry.recycle();
}