Начинаем работать с Лифтом

Derek Chen-Becker, Marius Danciu, David Pollak, Tyler Weir, “Starting with Lift”, public translation into Russian from English More about this translation.

Translate into another language.

Содержание

1. Добро пожаловать в Лифт!

1.1 Почему Лифт?

1.2 Больше подробностей

1.3 Ваше первое приложение

2 Основы Лифта

2.1 Что мы сделаем

2.2 Создание нового проекта

2.3 Добавление модели

2.4 Boot and Schemifier

2.5 Сниппеты: Соединяем отображение и логику

2.6 Дизайн первого шаблона Лифта

2.7 Обновление отображения ToDo

2.8 Рассматриваем работу сниппетов

2.9 Создание элемента todo

2.10 Обновление полей priority и desc

2.11 Подключение отображения к форме

2.12 Очередная проверка приложения

2.13 Вывод на экран и редактирование элементов todo

1 Добро пожаловать в Лифт!

Лифт разработан, чтобы сделать мощные методы легко доступными, сохраняя при этом фреймворк в целом простым и гибким. Это звучит как клише, но по нашему опыту Лифт делает разработку веселой, поскольку он позволяет вам сконцентрироваться на интересных частях кода. Цель этой книги в том, чтобы вы смогли создать и расширить любое веб-приложение о котором вы можете подумать.

1.1 Почему Лифт?

Те из вас, у кого есть опыт работы с другими веб-фреймворками, такими как Struts, Tapestry, Rails, и так далее, должны спрашивать себя: "Почему другой фреймворк? Действительно ли Лифт решает проблемы по-другому, и эффективнее тех фреймворков, которые я уже использовали раньше?" Основываясь на нашем опыте (и других в растущем Лифт-сообществе), ответ - решительное "Да!" Лифт снял сливки из лучших идей ряда других фреймворков, попутно созданию нескольких новых, своих собственных идей. Именно это сочетание твердой основы и новых методов, делает Лифт таким мощным. В то же время, в Лифт удалось избежать ошибок, допущенных в прошлом другими фреймворками. В духе "конфигурации по соглашению", Лифт имеет разумные значения по умолчанию на все, делая его легко настраиваемым на то, что именно Вам нужно, не больше и не меньше. Прошли времена, файлов XML, базовой конфигурации для вашего приложения после предоставления XML-файла. Вместо этого, основное приложение на Лифте лишь требует, чтобы вы добавили LiftFilter к вашему web.xml и добавили одну или более строк говорящих, какие пакеты ваших классов участвуют в работе. Методы, которые ваш код не требуется для реализации конкретных интерфейс (так называемых черт, trait в Scala), хотя есть поддержка черт, которые делают что-то гораздо проще. Короче говоря, вам не нужно ничего писать руками, кроме того, что явно не необходимо для выполнения вашей задачи; Лифт предназначен для работы "из коробки", и сделает вас настолько эффективным и производительным насколько это возможно.

Одним из ключевых преимуществ Лифта является чистое разделение содержания представления и логики, основанное на прочном фундаменте концепция Model-View-Controller *1). Одна из оригинальных технологий Java веб приложений, которые все еще используются сегодня - JSP, или Java Server Pages *2). JSP позволяет смешивать HTML и Java-код непосредственно в странице. Хотя это может показаться хорошей идеей в начале, он оказался болезненным на практике. Ввод кода в слой презентации делает его более трудным для отладки и понимания, что происходит внутри страницы, и делает более трудным для людей, пишущих HTML части, поскольку содержание не являются действительными HTML. Хотя многие современные программы и HTML редакторы были изменены в целях удовлетворения этой каше, надлежащей подсветкой синтаксиса и подтверждения не наверстать то, что вам все равно придется переключаться с одного или нескольких файлов в последующие страницы потока. Лифт имеет подход, согласно которому не должно быть никакого кода в слое представления, но что слой представления должен быть достаточно гибким для удовлетворения любых мыслимых целей. С этой целью, в Лифт используется мощная система шаблонов, а-ля Wicket *3), чтобы связать сформированные пользователем данные и слой презентации. Шаблоны Лифта построены на обработке XML возможностей языка Scala *4), а также позволяет такие вещи, как вложенные шаблоны, простая инъекция (simple injection) пользовательского контента и расширенные возможности привязки данных. Для тех, кто прибходит из JSP, Расширенный процессор обработки шаблонов и XML Лифта позволяет по-существу написать библиотеки пользовательских тегов за долю затрат времени и усилий [видимо, по отношению к jps].

Лифт имеет еще одно преимущество, что никакая другой Фреймворк Сети в настоящее время не разделяет: язык программирования Scala. Скала представляет собой относительно новый язык, разработанный Мартином Odersky *5) и его группы в EPFL Швейцарии. В нем скомпилированы в байт-код Java и работает на виртуальной машины Java, а это значит, что можно использовать огромную экосистему библиотек Java так же, как с любым другим веб-фреймворком на Java. В то же время, Скала вводит несколько очень мощных функций, позволяющих сделать вас, разработчиков, более производительным. Среди этих особенностей являются чрезвычайно богатая система типов наряду с мощным вывод типа, естественная обработка XML, полная поддержка для замыканий и функции как объектов, и обширные высокоуровневые библиотеки. Мощность системы типов, а также его тип логического вывода, что люди вынуждены называть его "статически типизированным динамическим языком" *6). Это означает, что вы можете писать код так же быстро, как вы могли бы с динамически типизированными языками (Python, Ruby и т.д.), но у вас есть время компиляции типа безопасности статически типизированный язык, как Java. Скала также гибридные функциональное и объектно-ориентированный язык, который означает, что вы можете получить власть высшего функционального уровня (или ФП) Языки (таких, как Haskell, схемы и т.п.), сохранив модульность и повторное использование компонентов OO. В частности, концепция ФП неизменности хорошо представлена в Скала, и является одним из простейших средств высокой масштабируемости пропускной способности. Гибридная модель также означает, что если вы еще не коснулась ФП раньше, вы можете постепенно и просто войти в нее. По нашему опыту, Скала позволяет вам делать больше в Лифте с меньшим числом строк кода; напомню, Лифт делает все, чтобы сделать вашу работу более продуктивной!

Лифт стремится охватить дополнительные возможности очень кратким и простым способом. Мощная поддержка AJAX и COMET в Лифте позволят вам использовать возможности веб 2.0 с очень небольшим усилием. Лифт использует библиотеку Actor Скалы по предоставлению фреймворков, управляемых сообщениями для COMET-обновлений . В большинстве случаев, COMET-добавления поддержки странице, просто предусматривает расширение черт (trait) *7) определить методы рендеринга страницы и добавление дополнительного вызова функции к ссылкам направить сообщение об обновлении; Лифт держит весь бэкэнд и код на стороне страниц для осуществления COMET-поллинга. AJAX поддержка включает в себя специальные указатели для ведения AJAX форму представления с помощью JSON, и почти все ссылки функция может быть легко превратить в AJAX версию с несколькими нажатиями клавиш. В целях заготовки все это на стороне клиента добро, лифт иерархию классов для инкапсуляции Javascript звонки через прямые Javascript, JQuery и YUI. Приятно то, что вы тоже можете использовать эти вспомогательные классы, что позволяет генерировать код, и не нужно положить Javascript логику в шаблоны.

1.2 Больше подробностей

Лифт имеет очень активное сообщество пользователей и разработчиков. С момента своего создания в начале 2007 года община выросла до сотен участников по всему миру. Лидер проекта, Дэвид Поллак (David Pollak) *8) постоянно идет на список рассылки, отвечая на вопросы и с запросами функций. Существует основной группой разработчиков, работающих над проектом, но представления взяты из тех, кто делает хорошее дело и может превратиться в хороший код. Хотя мы стремимся охватить все вам нужно знать, в этой книге, здесь несколько дополнительных ресурсов для получения информации о Лифт:

1. Первым местом для поиска является вики на http://liftweb.net/index.php/Main_Page. Wiki ведется не только Давидом, но и многими активными членами Лифт- сообщества (включая авторов). Части этой книги, как вызваны и брать от содержания на вики. В частности, в нем есть ссылки на все генерируемые документации не только для стабильной ветки, но и для неустойчивой, если вы любите приключения. Там также обширный раздел HowTos и статей по продвинутой тематике, которые охватывает большой объем информации.

2. Список рассылки на http://groups.google.com/group/liftweb очень активный, и если есть то, что эта книга не охватывает вы можете свободно задавать вопросы, там подписано много очень знающих людей, которые должны быть в состоянии ответить на ваши вопросы. Пожалуйста, посылайте на конкретные вопросы о книге к Google группе "Лифт книга" здесь http://groups.google.com/group/the-lift-book, все остальное, что касается Лифта - является "честной игрой" для списка рассылки.

3. Лифт имеет канал IRC irc://irc.freenode.net/lift, который обычно имеет несколько человек, в каждый момент времени. Это отличное место, чтобы поговорить о проблемах и идеи, касающиеся лифт.

1.3 Ваше первое приложение

Мы много говорили о Лифте и его возможностях, а теперь давайте возьмем его в руки и поробуем написать приложение. Прежде чем мы начнем, однако, мы должны сделать подготовку:

Java 1.5 JDK

Lift работает на Scala, которая запускается на JVM; Первая вещь, которую вы должны установить это новая версия Java SE JVM (http://java.sun.com/). Пожалуйста установите JDK 1.5 или новее. Если вы используете Mac, JDK у вас уже есть.

Maven 2

Maven это инструмент управления проектом. Maven имеет обширные возможности для создания, управления зависимостями, тестирования и отчетности. Если вы еще не использовали Maven прежде, сейчас вы можете думать о нем, как о невероятно мощной версии [gnu]make. Вы можете скачать последнюю версию Maven с http://maven.apache.org/. Краткая инструкции по установке (достаточно, чтобы начть) находятся на странице загрузки, в http://maven.apache.org/download.html. Вы должны иметь установленный Maven 2.0.9 или выше. В Mac OS X установлен Maven 2.0.6. Пожалуйста, установите 2.0.9 и убедитесь, что версия, которую вы установили это первая версия, в переменной PATH.

Редактор программиста

Не существует жесткого требования на этот случай, но когда мы начинаем кодировать, то очень полезным оказывается иметь нечно более способное, чем блокнот. Если Вам нравится полнофункциональные IDE? с поддержкой таких вещей, как отладка, непрерывная проверка компиляции и т.д., то есть плагины, доступные на сайте Scala http://www.scala-lang.org/node/91. Плагины поддерживают:

Eclipse

http://www.eclipse.org/ Разработчик плагина Scala рекомендует использовать Eclipse Classic.

NetBeans

http://www.netbeans.org Требуется NetBeans 6.5

IntelliJ

IDEA
http://www.jetbrains.com/idea/index.html

Если тебе нравится что-то более легковесное, то Scala распространяется с плагинами для редакторов VIM, Emacs, jedit и т.д. Ты можешь также скачать полную версию дистрибутива Scala с http://www.scala-lang.org/ и использовать файлы в разделе misc/scala-tool-support или можешь напрямую получить доступ к наиболее поздней версии через интерфейс SVN (Subversion) в https://lampsvn.epfl.ch/trac/scala/browser/scala-tool-support/trunk/src . Получение этих плагинов выходит за рамки книги.

Теперь, когда у нас есть всё необходимое, самое время начинать. Мы собираемся максимально задействовать Maven’s archetypes, чтобы они сделали за нас 99% работы. В начале, перейдите в любую директорию, в которой Вы хотели бы работать:

cd work

Далее, мы используем команду Maven archetype:generate для создания скелета будущего проекта:

mvn archetype:generate -U \

-DarchetypeGroupId=net.liftweb \

-DarchetypeArtifactId=lift-archetype-blank \

-DarchetypeVersion=1.0 \

-DremoteRepositories=http://scala-tools.org/repo-releases \

-DgroupId=demo.helloworld \

-DartifactId=helloworld \

-Dversion=1.0-SNAPSHOT

Maven должен выдать несколько страниц текста. Он может остановиться и попросить вас подтвердить свойства конфигурации, в этом случае вы можете просто нажать <Enter>. В конце вы должны получить сообщение, BUILD SUCCESSFUL. Вы успешно создали свой первый проект! Не верите нам? Давайте запустим его для подтверждения:

cd helloworld

mvn jetty:run

Maven выведет несколько страниц, заканончив строкой

[INFO] Starting scanner at interval of 5 seconds.

Это означает, что теперь у вас есть веб-сервер (Jetty *9) ), работающий на порту 8080 вашей машины. Просто зайдите на http://localhost:8080/, и вы увидите вашу первую Лифт-страницу стандартного "Hello World!". С помощью нескольких простых команд мы построили функциональное (хотя и ограниченное) веб-приложение. Пойдем и несколько более подробно и посмотрим, как именно эти куски сочетаются друг с другом. Во-первых, давайте рассмотрим индексную страницу. Всякий раз, когда Лифт обслуживает запроса, где URL заканчивается косой чертой, Лифт автоматически ищет файл с именем index.html *10) в этом каталоге. Например, если вы попытались открыть http://localhost:8080/test/, лифт будет искать index.html в директории test/ в вашем проекте. HTML источники будут находиться в src/main/webapp/ в каталоге вашего проекта. Вот файл index.html из нашtго проекта "Привет мир":

<lift:surround with="default" at="content">

<h2>Welcome to your project!</h2>

<p><lift:helloWorld.howdy /></p>

</lift:surround>

Это может показаться немного странным на первый взгляд. Тех, кто с имеет некоторый опыт XML, могут узнать здесь использование элементов с префиксами. Для тех, кто не знает что это такое, элемент с префиксом - XML элемент вида

<prefix:element>

В нашем случае мы имеем два элемента в использовании: <lift:surround> и <lift:helloWorld.howdy/>. Лифт придает особое значение элементам, которые используют префикс "lift", они формируют основу обширной поддержки шаблонов Лифта. Когда Лифт обрабатывает XML шаблон, он делает это от внешнего элемента внутрь. В нашем случае, внешний элемент - <lift:surround with="default" at="content">. Элемент <lift:surround> просто говорит Лифту, чтобы найти файл шаблона c именем из атрибута with (в нашем случае - "default") и положить содержимое нашего элемента внутри этого шаблона. Атрибут at указывает Лифтe, где в шаблоне, надо разместить наше содержание. В лифт, это "заполннение бланков", называется связыванием (биндингом), и это фундаментальное понятие системы шаблонов Лифта. Почти все на HTML/XML уровне можно рассматривать как серию вложенных привязок. Прежде чем мы перейдем к элементу <lift:helloWorld.howdy/>, давайте вернемся и посмотрим на шаблон по умолчанию. Вы можете найти его в каталоге "templates-hidden" веб-приложения. Так же, как в каталоги веб-приложений Java WEB-INF и META-INF, содержимое templates-hidden не может быть доступно непосредственно клиентам, они доступны, однако, когда на них ссылается элемент <lift:surround>. Вот default.html файл:

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:lift="http://liftweb.net/">

<head>

<meta http-equiv="content-type" content="text/html; charset=UTF-8" />

<meta name="description" content="" />

<meta name="keywords" content="" />

<title>demo.helloworld:helloworld:1.0-SNAPSHOT</title>

<script id="jquery" src="/classpath/jquery.js" type="text/javascript">

</script>

</head>

<body>

<lift:bind name="content" />

<lift:Menu.builder />

<lift:msgs/>

</body>

</html>

Как вы можете видеть в листинге, это правильный XHTML файл, с <html>, <head> и <body>. Это необходимо, поскольку лифт не добавить их сам; Лифт просто обрабатывает XML от каждого шаблона, с которым он сталкивается. Элемент <head> и его содержимое простая болванка; интересные вещи происходят внутри элемента <body>. Здесь есть три элемента:

1. Элемент <lift:bind Name="content" /> определяет, где содержимое нашего файла index.html будет вставлено. Значение атрибута name должен совпадать со значением at- атрибута в нашем элементе <lift:surround>.

2. Элемент <lift:Menu.builder /> представляет собой специальный элемент, который строит меню на основе SiteMap. SiteMap является высокоуровневой компонентой каталога сайта, который не только обеспечивает централизованное место для определения меню сайта, но позволяет вам контролировать, когда отображаются определенные связи (на основе, скажем, зашел ли пользователь в систему или какуая у него роль) и обеспечивает механизма контроля доступа на уровне страниц.

3. <lift:msgs/> Элемент позволяет Лифту (или вашему коду) отображать сообщения, возникающие во время отдачи страницы. Это могут быть сообщения о статусе, сообщения об ошибках и т.д. Лифт создает условия для установки одного или нескольких сообщений внутри вашей логики кода.

Теперь давайте посмотрим назад на элемент <lift:helloWorld.howdy/> из файла index.html. Этот элемент (и,на самом деле, элемент <lift:Menu.builder />) называется фрагмент (сниппет), и его общий вид

<lift:class.method>

Где class является именем класса Скала определеного в нашем проекте в пакете demo.helloworld.snippets и method - это метод, определенный на этом классе. Лифт делает небольшое изменение имени класса - изменяет camel-case обратно в title-case, а затем находит класс. В нашем демо-приложении класс находится в src/main/scala/demo/helloworld/snippet/HelloWorld.scala и показан здесь:

package demo.helloworld.snippet

class HelloWorld {

def howdy: NodeSeq =

<span>Welcome to helloworld at {new java.util.Date}</span>

}

Pages: ← previous Ctrl next
1 2 3 4 5 6

© Copyright © 2008, 2009 Derek Chen-Becker, Marius Danciu, David Pollak and Tyler Weir

Original (English): Starting with Lift

Translation: © Адель Чепкунов, writepavel, ignatov, lavrovvv, KorRomMar, VesninAndrey, def, krolser .

License: Creative Commons Attribution-No Derivative Works 3.0 Unported License.

translated.by crowd

Like this translation? Share it or bookmark!