К основному контенту

Разработка реального приложения grails

Для создания приложения grails нужно в консоли набрать следующие команды:


 sa@noname:~/projects$ grails create-app
| Environment set to development.....
> Application name not specified. Please enter: contacts
| Created Grails Application at /home/sa/projects/contacts
sa@noname:~/projects$ cd contacts
sa@noname:~/projects/contacts$ grails
| Enter a script name to run. Use TAB for completion:
grails> create-domain-class Contact
| Compiling 38 source files

| Created file grails-app/domain/contacts/Contact.groovy
| Created file test/unit/contacts/ContactTests.groovy
grails> generate-all contacts.Contact
| Finished generation for domain class contacts.Contact
grails> run-app
| Server running. Browse to http://localhost:8080/contacts
| Application loaded in interactive mode. Type 'exit' to shutdown.

Итак мы создали каркас приложения contacts.
У каждого контакта (как мы выяснили путем анализа предметной области) есть
список телефонов. В качестве хранилища телефонов можно ( и правильно с точки зрения ООП) ввести новый класс - Телефон. Однако, следуя традиции ремесленного программирования - пытаемся облегчить( упростить) задачу, исходя из размышлений о том, что телефоны будут учитываться для себя и круг контактов у нас не так велик, а следовательно и изменения в его (линейную на сейчас) структуру вносить вряд ли понадобится. Итак имеем класс Contact:
package contacts

class Contact {
   
    String name
    Date dateCreated //
    Date lastUpdated // - автополя(заполняются grails автоматически!)
  
    static hasMany=[phones:String,emails:String]  
   
  
    static constraints = {
    
    }
}

Если теперь сгенерировать представления командой generate-all, в шаблоне _form.gsp вместо списка телефонов мы увидим лишь метку(label), которая напомнит нам несмотря ни на что, телефоны все-таки существуют. Вот так облегчили задачу! Да если бы мы не поленились и добавили еще пару классов, то grails сделал бы все эти поля редактируемыми! Но  мы не намерены сдаваться. Модифицируем класс следующим образом:
package contacts

class Contact {
   
    String name
    Date dateCreated
    Date lastUpdated
    String listPhone
    static hasMany=[phones:String,emails:String]  
   
    public String getListPhone() {
      def lst = ""
         phones.each{ lst=lst+it}
      return lst
    }
   
    public void setListPhone(String listPhone) {
     this.phones=listPhone.split('/n');
     this.listPhone=listPhone
    }

    static transients = ['listPhone']

    static constraints = {
    
    }
}
и добавим в _forms.gsp вот такой код:
<g:textArea name="listPhone" value="${contactInstance?.listPhone}" rows="5" cols="40"/>
Т.е. используя несохраняемое поле будем, передавать через него данные в phones.
В качестве логического разделителя договоримся использовать символ новой строки. Вуаля! Осталось добавить колонку в представление list.gsp:
<thead>
                    <tr>
.......................
<g:sortableColumn property="listPhone" title="${message(code: 'contact.listPhone.label', default: 'List Phone')}" />
...................
</tr>
                </thead>
                <tbody>
                <g:each in="${contactInstanceList}" status="i" var="contactInstance">
............................
<td>${fieldValue(bean: contactInstance, field: "listPhone")}</td>
................................................
В следующих уроках: полнотекстовый поиск по базе, ограничение доступа к приложению, добавление отчета.

Комментарии

Популярные сообщения из этого блога

Кирилица в Arch Linux

После вчерашних обновлений в консоли Arch Linux при выборе русской локали вместо букв печатаются белые квадратики. Очевидно, что по какой-то причине не загружается прописанный в rc.conf шрифт. Временное лекарство от этого: выполнить команду setfont cyr-sun16 . Еще у меня в момент начальной загрузки появляется рябь на экране как от сильных электромагнитных помех в ЭЛТ, хотя у меня ЖК. Может быть это как-то связано.

Сортировка массивов в groovy

Любой массив в java и groovy можно отсортировать статическим методом: Arrays.sort(c); причем это будет очень быстро сто тысяч элементов типа int сортируются за 1 секунду на celeron M 1,8 Mg. Если это массив объектов можно использовать перегруженный метод Arrays.sort(c,comporator);

Arch Linux - руссификация консоли

Вчера, придя с работы, как всегда затеял InstallFest. Уже практически не задумываясь установил свежий арч. И тут заметил что в tty вместо русского - квадратики. Под утро нашел таки сообщение на форме, что в этом виноваты дрова от видео. Там правда речь шла о нвидиа, а у меня ати. Буду пробовать. И еще в lxterminal обратил внимание что сообщения на русском, а то что я вводил на русском потом возвращается системой в виде юникод-символов. Вот такие дела. UPDATE: драйвер не причем. переустановил в консоли(до установки X) по прежнему квадратики вместо букв. неужели придется переключатся на инглиш? Заметил что initscripts скачался c какого-то зеркала не с яндекса. возможно причина в нем.