我是JSF和bean的新手,我有一种情况需要从DB(oracle)获取一些数据并在控制台上显示。我的第一个bean将从JSF读取数据并在第二个bean中调用相应的方法,并将带有数据的列表发送回bean。基于数据,将再次调用第二个bean中的另一个方法来获取其他数据。最后,数据将发布给用户。我的第二个bean将负责数据库连接。这是我的代码。 第一个豆,
String ban = null,ban1 = null;
masterlist = (ArrayList<ThreadDTO>) getMbd().getBanOrCtn(dbean);
if (masterlist.isEmpty()) {
setSuccess(2);
return;
} else {
Iterator<ThreadDTO> itr = masterlist.iterator();
while (itr.hasNext()) {
ThreadDTO dto = (ThreadDTO) itr.next();
ban1 = dto.getWireless_ban();
if (ban1 != null) {
ban = ban1;
break;
}
}
ctnThreadList = (ArrayList<ThreadDTO>) getMbd().getThreads(dbean);
dbean.setSearchby("wireless_ban");
dbean.setSearchValue(ban);
banThreadList = (ArrayList<ThreadDTO>) getMbd().getThreads(dbean);
masterlist.clear();
masterlist = (ArrayList<ThreadDTO>) getMbd().removeDuplicates( ctnThreadList, banThreadList);
setResultlist((ArrayList<ThreadDTO>) getMbd().getApis(masterlist));
}
Second Bean是,
public ArrayList<ThreadDTO> getBanOrCtn(SearchDetailsDTO db) throws Exception {
ArrayList<ThreadDTO> threadlist1 = new ArrayList<>();
//query here
try {
connection = getConnections(timeZone);//getting connection
stmt = connection.createStatement();
rs = stmt.executeQuery(banQuery);
if (!rs.isBeforeFirst()) {
System.out.println("empty resultset");
stmt.close();
rs.close();
connection.close();
} else {
while (rs.next()) {
ThreadDTO thread = new ThreadDTO();
//code to set the values
break;
}
}
} catch (SQLException sql) {
addErrorMessage(sql.getMessage());
}
return threadlist;
}
这可能不是一个好的编码实践,但是这对单个用户来说工作正常,但我的要求是由多个用户访问。任何人都可以告诉我,我怎样才能做到这一点。提前谢谢。
答案 0 :(得分:0)
如果您需要在两个bean之间的作用域会话下维护数据,我建议您注入托管bean。您可以通过使用@ManagedProperty在另一个bean中注释bean来实现。然后,您可以轻松访问此bean的方法。在这里你可以找到更多,以及一个例子。 http://www.mkyong.com/jsf2/injecting-managed-beans-in-jsf-2-0/