プラグイン(拡張ライブラリなど)の場合、指定された「var」名でデータソースにアクセスしようとします。次のコードを使用すると、データソースオブジェクトへのアクセスが非常に簡単になります。
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()にアクセスしたいのですが、この時点でnullpointer例外が発生しています。データソースにはメモビューが含まれています。データソースを初期化するために何かを逃しましたか?