在任务流中呈现视图之前对事件进行排队

时间:2014-10-28 09:46:58

标签: java jsf oracle-adf

我有一个包含两个视图的任务流:listOfClientsnewClient。如图所示:

TaskFlow

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

1 个答案:

答案 0 :(得分:0)

您使用的是什么JDeveloper版本?

findComponent不起作用,因为还没有渲染。因此,当时您的组件不可用(=尚不存在)。

我认为有一种更简单的排序方式。 在您的页面/片段上,转到“ Bindings ”,选择您的迭代器(中间列),单击编辑(铅笔图标)并在''中设置您想要的排序排序条件'标签。