Помогите, плиз, с заполнением GRID на ZK

 
0
 
Java
ava
Wadim401978 | 01.10.2013, 23:27
Доброго времени суток!

Есть две таблицы «Работники»(Workers) и «Задачи работников» (WorkerTasks). Связаны как «один к многим» (Поле Worker таблицы WorkerTasks – это внешний ключ связи с таблицей Worker (по id)). С созданием и заполнением особых проблем нет – в трейс получается вывести корректный результат и с помощью критериев гиберната, и с помощью HQL, и с помощью обыкновенных SQL-запросов Проект делаю на Maven в IDE Eclipse. Проблема возникла, когда дошла очередь до интерфейса, который по заданию необходимо сделать на ZK.
А сделать с помощью ZK интерфейса нужно следующее: список работников поместить в разворачивающийся список Listbox, а задачи в таблицу Grid. При селекте работника, таблица заполняется задачами только выбранного (селектом в Listbox-е) работника. При смене работника соответственно меняется заполнение таблицы.
Для решения задачи я создал файл интерфейса index.zul и java-class WorkerController. Попытался реализовать интерфейс с помощью MVC. Все сначал шло хорошо – заполнился listbox при загрузке index.zul. Правда, я не понял – как сделать selected (элемент списка по умолчанию). Ответ на этот вопрос мне интересен, но это – второстепенный вопрос.
Главный вопрос связан с применением метода setModel. При попытке его применить к таблице Grid (она у меня обозвана workerListbox) возникает ошибка NPE. Как я понял с форумов всяких этих англосаксов, такое явление объясняется тем, что моя Grid workerListbox имеет значение null.
Я – новичок в java и ZK, поэтому мне сложно представить себе – каким должно быть значение у идентификатора типа Grid (да, собственно и других типов – listbox, combobox и т.д.) и как его установить в значение, отличное от null??? Может я вообще, концептуально неправ – мне стоит изменить подход к реализуемой модели? В этом случае все равно взываю о помощи – помогите советом или указанием.

Вот мой index.zul


            <tabpanel>

                <window id="TaskTitle" title="Планирование задач сотрудника"
                    border="normal" width="280px" apply="my.workers.zk.WorkerController">

                    <hbox pack="center" align="top" width="100%" height="80px">
                        <style src="/widgets/css/html.css" />
                        <div height="50px" width="443px" class="combodivarea">
                            <separator spacing="10px" />
                            <label value="Сотрудник" class="boxlabel" />

                            <!--combobox id="cmbwoker1" model="${TaskTitle$composer.workerList}"  model="${TaskTable$composer.workertaskList}"
                                model="${TaskTable$composer.workertaskList}" autodrop="true" > <template
                                name="model"> <comboitem label="${each}" id="${each.id}" /> </template> </combobox -->

                            <listbox id="cmbwoker1" model="${TaskTitle$composer.workerList}"
                                mold="select" width="150px">
                                <template name="model">
                                    <listitem label="${each}" id="${each.id}" />
                                </template>
                            </listbox>


                        </div>

                    </hbox>

                </window>



                <separator height="30px"></separator>


                <window id="TaskTable" border="normal" width="800px"
                    apply="my.workers.zk.WorkerController">
                    Таблица задач


                    <grid height="300px" model="${TaskTable$composer.workertaskList}" emptyMessage="No found in the result">
                        <columns>
                            <column label="Задача"/>
                            <column label="дата нач." />
                            <column label="месяц нач." />
                            <column label="ДатаКон" />
                            <column label="МесяцКон" />
                        </columns>
                        <template name="model">
                            <row>
                                <label value="${each.task.description}" />
                                <label value="${each.dateBeg}" />
                                <label value="${each.monthBeg.monthName}" />
                                <label value="${each.dateEnd}" />
                                <label value="${each.monthEnd.monthName}" />
                                <textbox />
                            </row>
                        </template>
                    </grid>





                </window>

            </tabpanel>




Мой WorkerController





package (чемодан творчества рук моих);

import java.util.ArrayList;
import java.util.List;
import java.util.Set;

import (мое творчество);

import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.select.SelectorComposer;
import org.zkoss.zk.ui.select.annotation.Listen;
import org.zkoss.zk.ui.select.annotation.Wire;
import org.zkoss.zkplus.spring.SpringUtil;
import org.zkoss.zul.Grid;
import org.zkoss.zul.ListModel;
import org.zkoss.zul.ListModelList;
import org.zkoss.zul.Listbox;




public class WorkerController extends SelectorComposer<Component> {
    
    private static final long serialVersionUID = 8243942703081449079L;
    
    private WorkersDao workServ = (WorkersDao) SpringUtil.getBean("workersDao");
    private WorkerTasksDao worktaskServ = (WorkerTasksDao) SpringUtil.getBean("workerTasksDao");

    
    
    private ListModelList<Workers> workerList = new ListModelList<Workers>(workServ.findAll());
    private ListModel<WorkerTasks> workertaskList;
    
    List<WorkerTasks> wtArray = new ArrayList<WorkerTasks>();
    
    
    @Wire
    private Listbox cmbwoker1;
    
    
    @Wire
    private Grid workerListbox = null;
    
    

    public ListModel<Workers> getWorkerList() {
        return workerList;
    }

    
    public ListModel<WorkerTasks> getWorkertaskList() {
        return workertaskList;
    }


    



    @Listen("onSelect = #cmbwoker1")
    public void changeCmbwoker1() {
        
        
        Set<Workers> selection = ((ListModelList)cmbwoker1.getModel()).getSelection();
        Workers worker1 = selection.iterator().next();

        
        workertaskList = new ListModelList<WorkerTasks>(wtArray);
        List<WorkerTasks> wtList = worktaskServ.findAllByWorker(worker1);
        for (WorkerTasks wtItem : wtList) {
            wtArray.add(wtItem);
        }
        
        
        workerListbox.setModel(workertaskList);
        
        
        
    }
    
    

}



Заранее, спасибо!
Comments (0)

Comments are not added

Please register or login to write.
Firm of day
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Contributors
advanced
Submit