[[jsf-ru:quickstart|К списку]]
====== Hello, World! ======
Как и все нормальные люди, начнём изучение JSF с простенькой программы Hello, world!
===== Необходимые ингредиенты =====
* Веб-сервер, поддерживающий Servlet API 2.3 и JSP 1.2 или выше. Хотя на дворе уже давно 21-ый век и я посоветую скачать веб-сервер с поддержкой Servlet API 2.4 и JSP 2.0. Поверьте, вам же будет проще и удобней. Рекомендую [[http://tomcat.apache.org/|Apache Tomcat]] или [[http://www.jboss.com/products/jbossas|JBoss Application Server]]. Tomcat менее функционален, но значительно "легче" и быстрее. Если вы не знаете, в чём между ними разница, то с большой вероятностью вам хватит Tomcat'а. В любом случае для этого приложения разницы не будет никакой. В любом случае если вы будете писать свои JSF-приложения //правильно//, то вы с легкостью в любой момент сможете менять веб-сервер. **ВНИМАНИЕ!** Если вы выбрали JBoss, то прочитайте про [[jsf-ru:faq:with_jboss|специфику работы JSF и JBoss'а]].
* Реализация JSF. На данный момент существуют две реализации:
* [[http://javashoplm.sun.com/ECom/docs/Welcome.jsp?StoreId=22&PartDetailId=jsf-1_1_01-fcs-oth-JPR&TransactionId=noreg|JavaServer Faces v1.1.01 Reference Implementation]]
* [[http://myfaces.apache.org/|Apache MyFaces]]
* Прямые руки
===== Рецепт =====
- Создайте обычное веб-приложение со следующей стурктурой:
jsf-helloworld/
WEB-INF/
lib/
web.xml
faces-config.xml
index.jspx
- Поместите в папку ''lib'' JAR-файлы с реализацией JSF.
- Отредактируйте файл web.xml и добавьте в него следующее содержимое:
Hello, World
javax.faces.STATE_SAVING_METHOD
server
javax.faces.DEFAULT_SUFFIX
.jspx
com.sun.faces.validateXml
true
com.sun.faces.verifyObjects
true
Faces Servlet
Faces Servlet
javax.faces.webapp.FacesServlet
0
Faces Servlet
*.jsf
com.sun.faces.config.ConfigureListener
Restrict direct access to JSPs
*.jspx
Для тех, кто знаком с web-приложениями на Java, тут всё должно быть вполне понятно. Несколько пояснений:
- Я люблю JSPX, поэтому в качестве расширения для файлов, которые JSF должен считать свои страницы, выбрал именно jspx. Если вам так не нравится, то можете спокойно убрать параметр ''javax.faces.DEFAULT_SUFFIX'' (по умолчанию он равен именно ''.jsp'').
- Сервлет, отвечающий за JSF, я привязываю к расширению ''*.jsf''. Хотя в официальной документации чаще используется ''.faces'', оно слишком длинное, поэтому я его не использую.
- Крайне необходимо запретить прямой доступ к JSP(X)-страницам. Т.к. если к ним обратиться напрямую (через из собственное расширение ''.jsp(x)'', а не через сервлет (расширение ''.jsf''), то всё будет плохо. Это сделано с помощью ''security-constraint'''а, которому не даны никакие роли.
- **ВНИМАНИЕ!** Совершенно необходимо не забыть добавить листенера, иначе ничего работать не будет. Самое гнусное, что это нигде не написано, поэтому все начинающие JSF-писатели тратят кучу времени на попытки выяснить, почему у них ничего не работает.
- Если вы решили использовать MyFaces, то вам понадобится убрать все настройки, начинающиеся на ''com.sun'' (они действительны только для Sun'овской реализации JSF) и изменить листенера на ''org.apache.myfaces.webapp.StartupServletContextListener''.
- Отредактируйте файл ''faces-config.xml'' и добавьте в него следующее содержимое:
Это основной конфиг для JSF-приложений. В нём пока ничего нет, но он понадобится для последующих примеров.
- Отредактируйте файл ''index.jspx'' и добавьте в него следующее содержимое:
Что здесь что:
- '''' - это //корень всех зол//. Шучу. Это корневой тег, внутри которого должны располагаться все теги, имеющие отношение к JSF. Что делать когда теги используются в разных файлах, которые с помощью механизма '''' (или любых обёрток вокруг него) собираются в одну страницу, не спрашивайте. Потому что //я пока что не знаю//. Вообще, библиотека тегов '''' содержит в себе все базовые теги, не зависящие от того, какой будет формат у результирующих документов. А библиотека тегов '''' содержит теги, специфичные для HTML'я.
- '''' создаёт HTML-тег ''