對於插件(如擴展庫),我嘗試使用給定的「var」名稱訪問數據源。使用以下代碼訪問數據源對象非常簡單:訪問插件中的XPages數據源
m_DataSourceName包含數據源的名稱(var)。
public DataSource getDataSource() {
if (StringUtil.isNotEmpty(m_DataSourceName)) {
UIViewRoot vrCurrent = getFacesContext().getViewRoot();
if (vrCurrent instanceof UIViewRootEx) {
for (DataSource dsCurrent : ((UIViewRootEx) vrCurrent)
.getData()) {
if (m_DataSourceName.equals(dsCurrent.getVar())) {
return dsCurrent;
}
}
}
}
System.out.println("Datasource name:" + m_DataSourceName);
return null;
}
我得到的數據源回來,我可以投這個數據源:
private TabularDataModel getTDM(DataSource dsCurrent, FacesContext context) {
try {
if (dsCurrent instanceof ModelDataSource) {
ModelDataSource mds = (ModelDataSource) dsCurrent;
AbstractDataSource ads = (AbstractDataSource) mds;
ads.load(context);
System.out.println(ads.getBeanId());
if (ads.getBeanId() == null) {
}
DataModel tdm = mds.getDataModel();
if (tdm instanceof TabularDataModel) {
TabularDataModel tds = (TabularDataModel) tdm;
return tds;
}
}
return null;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
現在我想訪問TDM.getRowCount(),這一點上,我得到一個空指針異常。數據源包含註釋視圖。我錯過了什麼來初始化數據源?
如果您正在使用Notes查看,您將收到的* DominoViewDataModel *一個實例。這需要一個* com.ibm.xsp.component.FacesDataIterator *實例來訪問* getRows *方法。如果這設置,空指針異常消失... –
謝謝Sven,我會試試這個。我應該使用com.ibm.xsp.component.FacesDataIterator的子類還是構建自己的實現 –