Как заполнить xe:objectData Repeater или DataTable произвольными данными?

garrick

Lotus Team
26.10.2009
1 367
152
BIT
364
Есть некий набор данных не из Domino и не из JDBC, т.е "стандартные" источники данных не подходят. Это, например, Java List<Person>, где Person простой класс с небольшим набором полей - имя, номер, адрес и т.п. Как можно "подключить" такой произвольный набор данных к xe:eek:bjectData в таблице или репитере? Весть Интернет облазил, не нашел ни одного вменяемого рабочего примера. Из собственных экспериментов удаётся отобразить только простой массив (один столбец) данных. JavaScript- Array или Java - Vector<String>. Надо же показать несколько столбцов (полей) одной записи. Может у кого-то завалялась какая-нибудь шпаргалка на этот счёт?
 

alexas1

Green Team
10.04.2014
1 202
225
BIT
45
Есть некий набор данных не из Domino и не из JDBC, т.е "стандартные" источники данных не подходят. Это, например, Java List<Person>, где Person простой класс с небольшим набором полей - имя, номер, адрес и т.п. Как можно "подключить" такой произвольный набор данных к xe:eek:bjectData в таблице или репитере? Весть Интернет облазил, не нашел ни одного вменяемого рабочего примера. Из собственных экспериментов удаётся отобразить только простой массив (один столбец) данных. JavaScript- Array или Java - Vector<String>. Надо же показать несколько столбцов (полей) одной записи. Может у кого-то завалялась какая-нибудь шпаргалка на этот счёт?
жс массив массивов же работает
Или ты хочешь, как то аутоматычно - не описывая спецом столбцы?
...
Да и просто Джейсон строку можно взять в массив и в столбцах вычленить мидлом, например, нужное

ЗЫ в опеннтф Дожотейбл-чота-экст (не помню точно) - там в таблицу Джейсон массив суют (правд не очень красиво))), но видно как)
 

victorhalf

Green Team
29.05.2007
79
3
BIT
0
Если я правильно помню, то рипитеру главное чтобы было чтото перечисляемое. Что и откуда загружать для рипитера определяй в бине либо в конструкторе либо через кнопку вызывая метод.
JavaScript:
<xp:this.data>     
   <xe:objectData
            var="phones"
            createObject="#{javascript:return new dpgas.PhonesList();}">
   </xe:objectData>   
 </xp:this.data>
...
<xp:repeat
    id="repeat1"
    var="rdData"    indexVar="rdIndx"
    repeatControls="false"
    value="#{javascript:phones.findData(viewScope.skPhFio);}">
    <xp:table>
        <xp:tr>
        <xp:td>
            <xp:text    escape="false"
                id="computedField8"
                value="#{rdData.fio}">
            </xp:text>
        </xp:td>
        </xp:tr>
    </xp:table>
а сам явовский обьект у меня возвращает ArrayList в findData()
Java:
public class PhonesList implements Serializable {
    private static final long serialVersionUID = -8592525679610020051L;
    
    /**конструктор*/    public PhonesList(){    }
    /**поиск данных по фильтру для рипитера*/
    public ArrayList<PhonesData> findData (String filter){
        ArrayList<PhonesData> ret = new ArrayList<PhonesData>();
        //...searching
        return ret;
    }
    
    /**Объект одной записи док-та телефона     */
    public class PhonesData implements Serializable {
        private static final long serialVersionUID = -6136620977032908741L;
        private String fio = "";
        public String getFio() {            return fio;        }
        public void setFio(String fio) {            this.fio = fio;        }
    }
 

alexas1

Green Team
10.04.2014
1 202
225
BIT
45
Что-то у меня не получилось. Пример есть какой-нибудь?
массив массивов в репитер
JavaScript:
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
    <xp:text escape="true" id="arraydata"><xp:this.value><![CDATA[#{javascript:[["1a","1b","1c"],["2a","2b","2c"],["3a","3b","3c"]]}]]></xp:this.value></xp:text>
    <xp:br></xp:br>
    <xp:br></xp:br>
    <xp:repeat id="repeat1" rows="30" value="#{javascript:getComponent('arraydata').getValue()}" var="colname">
        <xp:text escape="true" id="computedField1"><xp:this.value><![CDATA[#{colname[0]}]]></xp:this.value></xp:text>
        &#160;
        &#160;
        <xp:text escape="true" id="computedField2">
            <xp:this.value><![CDATA[#{colname[1]}]]></xp:this.value>
        </xp:text>
        &#160; &#160;
        <xp:text escape="true" id="computedField3">
            <xp:this.value><![CDATA[#{colname[2]}]]></xp:this.value>
        </xp:text>
        <xp:br></xp:br></xp:repeat>
</xp:view>
с дататейбл точно так же
 

garrick

Lotus Team
26.10.2009
1 367
152
BIT
364
массив массивов в репитер
...
с дататейбл точно так же
т.е. данные кладём в text? Я пытался сделать Object Data Source или REST Service - не получилось, как я понимаю что-то не то у меня с форматом данных который я пытаюсь положить в Object Data Source или REST Service из Java Bean.
 

alexas1

Green Team
10.04.2014
1 202
225
BIT
45
т.е. данные кладём в text? Я пытался сделать Object Data Source или REST Service - не получилось, как я понимаю что-то не то у меня с форматом данных который я пытаюсь положить в Object Data Source или REST Service из Java Bean.
Не принципиально, важно правильно распарсить внутри репитера "объект Данные". Удобно чисто в ЖС - там типизация по барабану. К тому же, если предполагается активная динамика при работе с репитером, предпочтительно работать (имхо) (обновлять, добавлять, удалять в/из репитера) на стороне клиента, а это тоже csjs. Т.е. расчитать стартовую таблицу сервером и отдать в браузер, а дальше, по возможности, работать чисто в клиенте (собственно модификации DOM). Я так делаю. Никакие суперуниверсальные хайповые библиотеки не использую, всё в ванилле, ну и джава, если надо втыкать целые большие куски а DOM (подготавливаю кастомконтролом на сервере, естественно, и вкрячиваю), это если структура таблицы сложная (всякие встроенные панели, ричтексты, имиджи-видео и проч...) По времени, канеш, кодить дольше, но работает быстро и я, хоть, точно понимаю, что и как происходит))

Ну и данные часто втыкаю в компютедтекст, чтобы оттуда потом забрать - туда инфа ложится в абсолютно предсказуемом формате и я этим легко могу управлять.

Но это всё имхо) сколько человек - столько подходов.
 

garrick

Lotus Team
26.10.2009
1 367
152
BIT
364
С Object Data Source и REST Service ничего не получается, ни grid, ни repeat данные оттуда не видят. Но если тот же самый код типа "bean.getList()" положить в соответствующее "поле" самого элемента grid или repeat, то всё замечательно читается. Почему так не разобрался. Ещё почему-то не удалось подружить REST Service c Dojo DataTable - делаю всё по учебнику, за исключением самого источника данных - вместо доминошных объектов заполняю коллекцией из java bean. При открытии такой страницы Dojo DataTable пишет в консоль, что не удалось найти элемент restService1 (ID REST Service), хотя я его в дизайнере даже не руками набираю, а выбираю из выпадающего списка. Подозреваю, что REST Service вообще не "прорисовался", всё слетело при получении данных, поэтому его и нет. Но найти что-либо на эту тему, какую-нибудь ошибку во всех известных мне логах и консолях не удалось.

В общем и целом проблему решить удалось. Большое спасибо.
 

alexas1

Green Team
10.04.2014
1 202
225
BIT
45
С Object Data Source и REST Service ничего не получается, ни grid, ни repeat данные оттуда не видят. Но если тот же самый код типа "bean.getList()" положить в соответствующее "поле" самого элемента grid или repeat, то всё замечательно читается. Почему так не разобрался. Ещё почему-то не удалось подружить REST Service c Dojo DataTable - делаю всё по учебнику, за исключением самого источника данных - вместо доминошных объектов заполняю коллекцией из java bean. При открытии такой страницы Dojo DataTable пишет в консоль, что не удалось найти элемент restService1 (ID REST Service), хотя я его в дизайнере даже не руками набираю, а выбираю из выпадающего списка. Подозреваю, что REST Service вообще не "прорисовался", всё слетело при получении данных, поэтому его и нет. Но найти что-либо на эту тему, какую-нибудь ошибку во всех известных мне логах и консолях не удалось.

В общем и целом проблему решить удалось. Большое спасибо.
странно, у меня и ОДС и РЕСТ нормально работают((

Чтото там с область видимости...
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!