コンポーネントExtendedDataModelClass
のデータ ソースとしてSeam の子を使用しようとしています。rich:dataTable
<rich:dataTable id="docPackList" var="pack" width="100%" rows="25"
value="#{specDocPackageList.dataModel}">
...
</rich:table>
この子のメソッド内で、Seam の から派生したコントローラーのwalk
メソッドを呼び出します。このコントローラーには、Seam で注入されたいくつかのフィールドがあります。getResultList
EntityQUery
@Name("specDocPackageList")
@Scope(ScopeType.CONVERSATION)
public class SpecDocPackageList extends EntityQuery<DocPackage> {
@In(create = true, value = "orgunitList")
private OrgUnitList orgUnitListController;
public OrgUnitList getOrgUnitListController() {
return orgUnitListController;
}
public void setOrgUnitListController(OrgUnitList orgUnitListController) {
this.orgUnitListController = orgUnitListController;
}
private SelectableQueryDataModel entityQueryDataModel;
@Override
public DataModel getDataModel() {
if (entityQueryDataModel == null) {
entityQueryDataModel = SelectableQueryDataModel.getInstance(this);
}
return entityQueryDataModel;
}
...
}
public class SelectableQueryDataModel<T, K> extends ExtendedDataModel {
private EntityQuery<T> dataProvider;
public SelectableQueryDataModel(EntityQuery<T> query) {
dataProvider = query;
...
}
public static SelectableQueryDataModel getInstance(EntityQuery query) {
return new SelectableQueryDataModel(query);
}
public void walk(FacesContext facesContext, DataVisitor dataVisitor, Range range, Object o) throws IOException {
...
for (T item : this.dataProvider.getResultList()) {
...
}
...
}
}
問題は、メソッドから呼び出されnull
たspecDocPackageList.orgUnitListController
ときに私が持っていることです。その時点で例外はスローされません。ただし、 のデータを取得するために が呼び出されると、このフィールドは正しい方法で挿入されます。specDocPackageList.getResultList()
SelectableQueryDataModel.walk
getResultList()
rich:dataTable
<rich:dataTable id="docPackList" var="pack" width="100%" rows="25"
value="#{specDocPackageList.resultList}">
...
</rich:table>
なぜ Seam は最初のケースではこのフィールドを挿入せず、2 番目のケースではそれを行わないのですか?