Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision |
jsf-ru:quickstart [2005/12/25 16:10] – slonopotamus | jsf-ru:quickstart [2006/01/16 14:07] – добавлена ссылка на туториал по написанию собственных компонентов slonopotamus |
---|
| [[jsf-ru:|На главную]] |
====== Быстрый старт ====== | ====== Быстрый старт ====== |
===== Hello, world! ===== | |
Как и все нормальные люди, начнём изучение JSF с простенькой программы Hello, world! | ===== Туториалы ===== |
==== Необходимые ингредиенты ==== | * [[.:quickstart:hello_world|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, то прочитайте про [[.:with_jboss|специфику работы JSF и JBoss'а]]. | * [[.:quickstart:simple_navigation|Простая навигация]] |
* Реализация JSF. На данный момент существуют две реализации: | * [[.:quickstart:managed_beans|Использование "managed beans"]] |
* [[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]] | * [[.:quickstart:validators|Валидаторы]] |
* [[http://myfaces.apache.org/|Apache MyFaces]] | * [[.:quickstart:converters|Конвертеры]] |
Я работаю с первой, поэтому советую вам сделать то же. Иначе я просто не смогу вам помочь, если будут появляться какие-то ошибки, связанные с конкретной реализацией JSF. | * [[.:quickstart:own_components|Написание собственных компонентов]] |
* Прямые руки | |
==== Рецепт ==== | ===== Продолжить изучение JSF ===== |
- Создайте обычное веб-приложение со следующей стурктурой: <code> | Если вы хотите продолжить знакомство с JSF, то вашему вниманию предлагается [[.:faq|FAQ по JSF]]. |
jsf-helloworld/ | |
WEB-INF/ | |
lib/ | |
web.xml | |
faces-config.xml | |
index.jspx | |
</code> | |
- Поместите в папку ''lib'' JAR-файлы с реализацией JSF. | |
- Отредактируйте файл web.xml и добавьте в него следующее содержимое: <code xml> | |
<?xml version="1.0" encoding="UTF-8"?> | |
<web-app version="2.4" | |
xmlns="http://java.sun.com/xml/ns/j2ee" | |
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | |
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> | |
<display-name>Hello, World</display-name> | |
<context-param> | |
<param-name>javax.faces.STATE_SAVING_METHOD</param-name> | |
<param-value>server</param-value> | |
</context-param> | |
<context-param> | |
<param-name>javax.faces.DEFAULT_SUFFIX</param-name> | |
<param-value>.jspx</param-value> | |
</context-param> | |
<context-param> | |
<param-name>com.sun.faces.validateXml</param-name> | |
<param-value>true</param-value> | |
</context-param> | |
<context-param> | |
<param-name>com.sun.faces.verifyObjects</param-name> | |
<param-value>true</param-value> | |
</context-param> | |
<servlet> | |
<display-name>Faces Servlet</display-name> | |
<servlet-name>Faces Servlet</servlet-name> | |
<servlet-class> | |
javax.faces.webapp.FacesServlet | |
</servlet-class> | |
<load-on-startup>0</load-on-startup> | |
</servlet> | |
<servlet-mapping> | |
<servlet-name>Faces Servlet</servlet-name> | |
<url-pattern>*.jsf</url-pattern> | |
</servlet-mapping> | |
<listener> | |
<listener-class>com.sun.faces.config.ConfigureListener</listener-class> | |
</listener> | |
<security-constraint> | |
<web-resource-collection> | |
<web-resource-name>Restrict direct access to JSPs</web-resource-name> | |
<url-pattern>*.jspx</url-pattern> | |
</web-resource-collection> | |
<auth-constraint></auth-constraint> | |
</security-constraint> | |
</web-app> | |
</code> Для тех, кто знаком с 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) и изменить листенера на //какой-то другой// FIXME. | |
- Отредактируйте файл ''index.jspx'' и добавьте в него следующее содержимое:<code xml> | |
<?xml version="1.0" encoding="UTF-8"?> | |
<jsp:root xmlns:f="http://java.sun.com/jsf/core" | |
xmlns:jsp="http://java.sun.com/JSP/Page" | |
xmlns:h="http://java.sun.com/jsf/html" | |
xmlns:xsd="http://www.w3.org/2001/XMLSchema" | |
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | |
xmlns="http://www.w3.org/1999/xhtml" | |
version="2.0"> | |
<f:view> | |
<html> | |
<body> | |
<h:form> | |
<h:outputText value="Hello, world!"/> | |
</h:form> | |
</body> | |
</html> | |
</f:view> | |
</jsp:root> | |
</code> Что здесь что: | |
- ''<f:view>'' - это //корень всех зол//. Шучу. Это корневой тег, внутри которого должны располагаться все теги, имеющие отношение к JSF. Что делать когда теги используются в разных файлах, которые с помощью механизма ''<jsp:include>'' (или любых обёрток вокруг него) собираются в одну страницу, не спрашивайте. Потому что //я пока что не знаю//. Вообще, библиотека тегов ''<f:...>'' содержит в себе все базовые теги, не зависящие от того, какой будет формат у результирующих документов. А библиотека тегов ''<h:...>'' содержит теги, специфичные для HTML'я. | |
- ''<h:form>'' создаёт HTML-тег ''<form>'' и кучу всякой дряни, необходимой для функционирования JSF. | |
- И наконец, ''<h:outputText>'' выводит текст. Этот тег гораздо более функционален, чем просто вывод текста, но о его остальной функциональности вы узнаете потом. | |