我有一个包含两个视图的任务流:listOfClients
和newClient
。如图所示:
listOfClients
视图有一个表,我想在渲染之前对其进行排序。为此,我想创建一个以表为源的SortEvent(如图in the docs, section 29.4.4所示),但在渲染视图之前我无法访问该表。
我在pageFlow-scoped托管bean中调用方法queueSortIdEvent
,但是findComponent
找不到表(返回null
)。尝试了视图范围,相同的结果。
我在bean中的代码是:
public UIComponent findComponent(final String id) {
FacesContext context = FacesContext.getCurrentInstance();
UIViewRoot root = context.getViewRoot();
final UIComponent[] found = new UIComponent[1];
root.visitTree(new FullVisitContext(context), new VisitCallback() {
@Override
public VisitResult visit(VisitContext context, UIComponent component) {
if(component.getId().equals(id)){
found[0] = component;
return VisitResult.COMPLETE;
}
return VisitResult.ACCEPT;
}
});
return found[0];
}
public void queueSortIdEvent(){
SortCriterion sc = new SortCriterion("ClientId", true);
List<SortCriterion> listSC = new ArrayList<>();
listSC.add(sc);
SortEvent new = new SortEvent(findComponent("t1"), listSC); // the table id is "t1"
new.queue();
}
有没有办法在渲染视图之前对事件进行排队?
注意:findComponent
函数在代码的其他部分正常工作,从here
我的JDeveloper版本是12.1.3
答案 0 :(得分:0)
您使用的是什么JDeveloper版本?
findComponent不起作用,因为还没有渲染。因此,当时您的组件不可用(=尚不存在)。
我认为有一种更简单的排序方式。 在您的页面/片段上,转到“ Bindings ”,选择您的迭代器(中间列),单击编辑(铅笔图标)并在''中设置您想要的排序排序条件'标签。