在插件中访问XPages数据源
对于插件(如扩展库),我尝试使用给定的“var”名称访问数据源。使用以下代码访问数据源对象非常容易: m_DataSourceName包含数据源的名称(var)在插件中访问XPages数据源,xpages,Xpages,对于插件(如扩展库),我尝试使用给定的“var”名称访问数据源。使用以下代码访问数据源对象非常容易: m_DataSourceName包含数据源的名称(var) public DataSource getDataSource() { if (StringUtil.isNotEmpty(m_DataSourceName)) { UIViewRoot vrCurrent = getFacesContext().getViewRoot(); if (vrCur
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(),这一点我得到了一个null指针异常。数据源包含一个notes视图。我没有初始化数据源吗?以下是解决您问题的方法: 这将为您提供视图的所有行,而不是条目计数*。F.e.如果您有一个分类视图,其中有5个类别,每个类别有一个条目,这将产生10行。参赛人数为5人 首先,创建一个实现FacesDataIterator的虚拟类 然后,您必须执行以下操作:
tdm.setDataControl( new DummyDataIterator() );
tdm.getRowCount();
(( com.ibm.xsp.model.domino.viewnavigator.NOIViewNavigatorEx) tdm.getDominoViewDataContainer().getNavigator()).calculateExactCount(tdm.getView());
如果您使用的是notes视图,则会收到DominoViewDataModel的实例。这需要com.ibm.xsp.component.FacesDataIterator的实例来访问getRows方法。如果设置了此选项,空指针异常将消失…谢谢Sven,我将尝试此选项。我应该使用com.ibm.xsp.component.FacesDataIterator的子类,还是构建自己的实现?我尝试过,在尝试访问rowdatas之前,它工作得很好。因此,我将tdm.setDataControl(新的DummyDataIterator)更改为tmd.setDataControl(新的UIDataEX()),并且在没有3。计算准确的行部分。。。。谢谢斯文的支持。您将在OpenNTF上的新POI 4 XPages项目中找到完整的解决方案
(( com.ibm.xsp.model.domino.viewnavigator.NOIViewNavigatorEx) tdm.getDominoViewDataContainer().getNavigator()).calculateExactCount(tdm.getView());
System.out.println("Rows: " + tdm.getRowCount() );
tdm.getView().getAllEntries().getCount()