Создание suggested items программно для inputListOfValues

Пример:

На странице

1
2
3
<af:inputListOfValues \*\*\* "/>
<af:autoSuggestBehavior suggestedItems="#{pageFlowScope.MyBean.onSuggestItems}"/>
</af:inputListOfValues>



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public List<SelectItem> onSuggestStores(String searshStr) {

    ViewObject vo = VOUtils.getViewObjectByName(CONSTANTS_VO.MY_VO);

    String WhereClauseParams = "";
    WhereClauseParams = "UPPER (SOME_ATTRIBUTE) LIKE UPPER ('%' || '" +  searshStr + "' || '%')";
    vo.setWhereClause(WhereClauseParams);
    vo.executeQuery();

    // Достаточно часто, нужно после execture сбросить добавленный WheWhereClauseParams
    VOUtils.clearWhereClauseToViewObject(vo);

    // Чтобы возвращались все строки
    // У меня без установки этого параметра всегда цикл выполнялся только 1 раз
    vo.setRangeSize(-1);

    ArrayList<SelectItem> selectItems = new ArrayList<SelectItem>();

    for (Row rw : vo.getAllRowsInRange()) {

        SelectItem si = new SelectItem((String) rw.getAttribute("MY_ATTRIBUTE"));
        selectItems.add(si);
    }
    return selectItems;

}



Другой вариант, с использованием итератора copy + paste



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public List<SelectItem> onSuggestItems(String searshStr) {

    ADFUtils.findIterator("MyIteratorName").getViewObject().setNamedWhereClauseParam("p_searsh", searshStr);
    ADFUtils.findIterator("MyIteratorName").getViewObject().executeQuery();

    ArrayList<SelectItem> selectItems = new ArrayList<SelectItem>();
    for (Row rw : ADFUtils.findIterator("MyIteratorName").getAllRowsInRange()) {
        SelectItem si = new SelectItem(rw.getAttribute("ItemValue"), (String) rw.getAttribute("ItemValue"));
        String item = (String) rw.getAttribute("Item");

        if (item == null) {
            si.setDisabled(true);
        }
        selectItems.add(si);
    }
    return selectItems;

}