JSF является стандартом для реализации каркасов (фреймворков) web-приложений на платформе Java. Существует эталонная реализация стандарта, которая называется Mojarra JSF. Она обеспечивает обработку запросов и предоставляет набор базовых компонентов для разработки пользовательского интерфейса. Фреймворк JSF является компоненто-ориентированным и вносит концепции разработки настольных приложений в разработку web-приложений.
Существует несколько версий JSF:
- JSF 1.0 (11 марта 2004) – первая реализация спецификации JSF;
- JSF 1.1 (27 мая 2004) – bugfix-релиз версии 1.0. В эту версию не включены ни какие изменения в спецификации, ни изменения в рендеринге HTML-кода, только исправления ошибок, допущенных в JSF 1.0.
- JSF 1.2 (11 мая 2006) – следующая версия реализации спецификации JSF со значительными доработками в ядре и API фреймворка.
Все эти версии обьяевлены разработчиками Sun (ныне Oracle) как устаревшие. Текущая актуальная версия JSF – JSF 2.0, вышедшая в свет 28 июня 2009 года. Эта версия намного проще в использовании чем все предыдущие (конфигурация аннотациями и пр. улучшения), значительно расширена функциональность фреймворка, а так же значительно улучшена производительность.
Ниже я буду рассматривать версию JSF 2.0.2. Официальная документация находится в документе The Java EE 6 Tutorial, Volume I. Официальный сайт проекта Mojarra: https://javaserverfaces.dev.java.net/.
JSF 2 предоставляет несколько новых и удобных возможностей, таких как стандартизированный механизм поддержки Ajax, валидация введенных пользователем данных с помощью аннотаций (JSR 303), использование технологии Facelets в качестве стандартного движка рендеринга и еще несколько функций, без которых невозможно представить современное web-приложение.
Стандартная реализация JSF предоставляет только основные функции для работы с HTML-компонентами, однако, одна из главных идей проекта – предоставить разработчикам возможность разрабатывать свои виджеты, например, деревья, сложные таблицы и т.д. Существует ряд сторонних библиотек компонентов. Самые популярные из них: ADF Faces, Trinidad, ICEFaces, PrimeFaces, RichFaces, NetAdvantage, JViews.
Проект Mojarra является Open Source, а версия JSF 2.0.2 распространяется под лицензиями Common Development and
Distribution License (CDDL) + GPLv2.
Тестовое приложение, которое описывается ниже, разработано в среде IntelliJ IDEA 9 (Maia) Ultimate Edition версии IU-95.4. Это не стабильная версия, но в ней есть значительные улучшения поддержки JSF 2 даже по сравнению с последней стабильной 9.0.1. IDEA – это коммерческая IDE. Персональная лицензия стоит $249. Скачать ее можно с сайта JetBrains.
После установки IDEA вы получаете практически полностью готовую для разработки IDE. В нее включены инструменты для работы с Maven (сам Maven должен быть установлен и настроен на вашем компьютере), SVN, Git. Вы можете подключить любой фреймворк, например, Spring или Hibernate, одним щелчком мыши. Нам же из всего этого набора понадобится только Maven, а выбор пал на IDEA из-за отличного редактора xhtml да и в общем, отличной поддержки JSF 2.
Hello World
Для начала необходимо создать проект. Проект у нас будет Maven-модулем. Выполните File -> New Project… Выберите Create project from scratch (создать проект с нуля). Заполните поле имя проекта. У меня проект называется hellojsf. Выберите в разделе Module Settings пункт Maven Module.
После того как вы нажмете Next, появится список архетипов (archetype – образец) Maven. Мы создадим обычное web-приложение. Выберите maven-archetype-webapp:RELEASE. GroupId у меня ru.topcode, ArtifactId оставляем по умолчанию, версию тоже. Maven создаст структуру проекта, откроет файл pom.xml и предложит включить авто-импорт. Мы на это предложение согласимся, нажав на Enable Auto-Import в правом верхнем углу. Теперь все зависимости, которые вы прописываете в pom.xml будут автоматически импортироваться в проект, а среда не будет задавать глупых вопросов.
Что требуется
Для разработки тестового приложения нам потребуется установленный и настроенный Maven. Как его установить и настроить читайте на официальном сайте проекта Maven 2.
Для тестирования web-приложения нам понадобится Tomcat 6.x.
Подключение Tomcat 6.x к IntelliJ IDEA 9
Процедура подключения Tomcat к IDEA – проще некуда:
- Скачайте Tomcat с официального сайта. Потребуется Binary Distributions Core zip.
- Распакуйте архив. У меня получился путь c:\devTools\apache-tomcat-6.0.26.
- Перейдите в IDEA, зайдите в меню Run -> Edit Configuration, нажмите на Add New Configuration и выберите Tomcat Server -> Local.
- Появится диалоговое окно настройки сервера. Нажмите на Configure… напротив комбобокса Application Server, нажмите в появившемся диалоговом окне Add и укажите путь до Tomcat (c:\devTools\apache-tomcat-6.0.26).
- Перейдите на вкладку Deployment и установите флажок на hellojsf:war.
- Проверьте как работает сервер. Для этого нажмите Run или Shift + F10. Проект развернется в Tomcat, после чего откроется браузер со страницей http://localhost:8080/ на которой отобразится фраза “Hello World!”.
Часто бывает что порт 8080 занят. Можно изменить его на какой-нибудь менее популярный. Делается это путем редактирования файла server.xml, который лежит в %CATALINA_HOME%\conf\. Откройте его и измените строку
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
на
<Connector port="8282" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
После этого снова откройте Run Configuration в IDEA и измените порт в строке Startup page.
Подключение библиотек JSF 2 к приложению
Подготовительный этап закончен, теперь нужно подключить библиотеки JSF 2 к нашему приложению. Для этого откройте pom.xml (если еще не открыт) и добавьте туда Maven-репозиторий, в котором лежат эти библиотеки:
<repositories> <repository> <id>maven2-repository.dev.java.net</id> <name>Java.net Repository for Maven</name> <url>http://download.java.net/maven/2</url> </repository> </repositories>
После этого в тэг dependencies нужно добавить новые зависимости:
<dependency> <groupId>com.sun.faces</groupId> <artifactId>jsf-api</artifactId> <version>2.0.2</version> </dependency> <dependency> <groupId>com.sun.faces</groupId> <artifactId>jsf-impl</artifactId> <version>2.0.2</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> </dependency>
На этом подключение библиотек JSF 2 закончено. Посмотрите, появились ли у вас эти библиотеки в навигаторе, в узле External Libraries. В IDEA также есть графический навигатор по pom.xml. Если вы не отказались от поддержки Maven при установки IDEA, то в правой части экрана у вас должна быть кнопка Maven Projects. Нажмите ее и вы увидите жизненный цикл Maven-проекта, состоящий из фаз, каждую из которых можно выполнить двойным щелчком, и список зависимостей. Если вы видите в этом дереве зависимости, которые мы только что добавили в pom.xml и они не подсвечены красной волнистой линией, значит все прошло успешно. Если они там не появились или подсвечиваются красной линией, значит у вас возникли какие-то проблемы, например, вы забыли подключиться к Internet
Замечание по поводу различных контейнеров сервлетов: Tomcat нормально реагирует на то, что вы деплоите библиотеки JSF 2 вместе с web-приложением, однако, например, в поставку GlassFish они уже входят и нет необходимости включать эти библиотеки в свой war-файл. Более того, из-за этого могут возникнуть проблемы.
Если вы используете Jetty для запуска web-приложений, то необходимо положить эти библиотеки в JETTY_HOME/lib/ext/ или создать для них отдельную директорию, например, JETTY_HOME/lib/ext/jsf-2.x/.
При использовании этих контейнеров, складывать библиотеки JSF в WEB-INF/lib web-приложения не нужно, однако для компиляции они все таки нужны. Поэтому в файле pom.xml в описание зависимостей нужно добавить
<scope>compile</scope>
Например,
<dependency> <groupId>com.sun.faces</groupId> <artifactId>jsf-api</artifactId> <version>2.0.2</version> <scope>compile</scope> </dependency>
Изменение web.xml
Класс-сервлет FacesServlet, запускает обработку жизненного цикла JSF-запроса и должен быть определен в web.xml. Тег маппинга сервлета (servlet-mapping) определяет URLы, которые должен обрабатывать FacesServlet. В спецификации JSF обычно используют Шаблон /faces/*, однако можно использовать и любой другой префикс или суффикс. После всех изменений web.xml должен выглядеть следующим образом:
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <display-name>hellojsf</display-name> <servlet> <servlet-name>Faces Servlet</servlet-name> <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>Faces Servlet</servlet-name> <url-pattern>/faces/*</url-pattern> </servlet-mapping> <context-param> <param-name>javax.faces.PROJECT_STAGE</param-name> <param-value>Development</param-value> </context-param> </web-app>
Здесь в context-param определен параметр javax.faces.PROJECT_STAGE со значением Development. Это нужно для того, чтобы при возникновении каких-либо исключительных ситуаций, в окно браузера выводился подробный отчет о возникшем исключении. По умолчанию значение этого параметра равно Production. Поэтому, при развертывании приложения на реальном сервере, можно просто удалить блок context-param.
Создание ресурсного файла
Хорошим тоном при разработке любых приложений, будь то настольное или web-приложение, является вынесение всех строковых констант в специальный ресурсный файл. Это позволяет легко интернационализировать приложение.
Сейчас мы имеем следующую структуру приложения:
Создайте директорию java в директории main, затем щелкните правой кнопкой на проекте (модуле) и выберите пункт Module Settings. Откроется диалоговое окно настройки модуля. На странице Sources в правой части в дереве проекта найдите директорию java, которую мы только что создали, выделите ее и нажмите на кнопку Sources, которая находится над деревом проекта. Вы увидите что пиктограмма папки стала синей. Это значит, что в этой директории хранятся исходники приложения. Сейчас у нас две такие директории. В директории java мы будем хранить наши исходные коды. Можете прямо сейчас создать в ней пакеты, например, ru.topcode. Папка resources будет содержать остальные ресурсы приложения, например, наши ресурсные файлы. В конечном итоге, все это окажется в WEB-INF/classes war-файла проекта.
Теперь добавьте в resources пакет messages, а в нем создайте файл messages.properties, в котором мы будем размещать все строковые константы. Получилась следующая структура:
Добавьте в messages.properties строку hello.world=Hello world. Левая часть этой строки – это ключ, по которому мы будем получать строку, стоящую в правой части.
Мы хотим чтобы ресурсы были доступны из страниц web-приложения, для этого нам необходимо создать конфигурационный файл faces-config.xml в директории WEB-INF и определить в нем наши ресурсы. Как я уже говорил в начале, IDEA полностью поддерживает JSF 2. Щелкните правой кнопкой на WEB-INF и выберите в меню New пункт Faces Config. IDEA создаст xml-документ в который нам нужно добавить описание ресурсов.
Делается это следующим образом:
<?xml version='1.0' encoding='UTF-8'?> <faces-config xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd" version="2.0"> <application> <locale-config> <default-locale>ru</default-locale> <!--<supported-locale>en</supported-locale>--> </locale-config> <resource-bundle> <base-name>messages.messages</base-name> <var>msgs</var> </resource-bundle> </application> </faces-config>
В блоке locale-config определяется локаль по умолчанию и поддерживаемые локали. У нас локаль только одна, поэтому я закоментировал тэг supported-locale.
В блоке resource-bundle в тэге base-name прописывается путь до файла с сообщениями, а в тэге var – имя переменной, с помощью которой мы будем обращаться к ресурсному бандлу.
Создание главной страницы
Теперь, чтобы протестировать работу ресурсов, нам нужна jsf-страница. В webapp уже есть файл index.jsp, который и показывал нам строку “Hello World!” когда мы первый раз запускали приложение чтобы проверить работу Tomcat. В спецификации JSF написано что JSP (и даже JSPX) – это устаревшая технология для использования в JSF 2 и рекомендуется использовать xhtml.
Однако, файл index.jsp нам пригодится. Он будет входным файлом в web-приложение и будет выполнять функцию редиректа на greeting.xhtml – главную страницу сайта. Нужно все это потому, что при входе на сайт по URL http://localhost:8080/ страница greeting.xhtml загрузится, но компоненты JSF на ней не обработаются, так как упомянутый выше javax.faces.webapp.FacesServlet обрабатывает только те запросы, в URL которых есть шаблон /faces/*. Поэтому, необходимо сделать входную страницу index.jsp, которая выполнит редирект на http://localhost:8080/faces/greeting.xhtml.
Страница index.jsp выглядит следующим образом:
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <jsp:forward page="/faces/greeting.xhtml" />
Теперь создайте в webapp файл greeting.xhtml и приведите его к следующему виду:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html"> <h:head> <title></title> </h:head> <h:body> <h:outputText value="#{msgs['hello.world']}" /> </h:body> </html>
Если в тэге html в определении пространств имен xmlns у вас всё красное, нажмите Alt + Enter и выберите пункт Enable Facelets Support. Теперь IDEA знает что вы работаете с JSF-проектом и больше капризничть не будет.
Чтобы убедиться, что технология ресурсов работает, нужно снова нажать Run. Если Tomcat у вас уже запущен, то IDEA предложит или передеплоить приложение, или перезапустить Tomcat. Нам будет достаточно передеплоить. После того как приложение развернется, главная страница уже не запустится в браузере, т.к. IDEA считает что она у нас уже открыта после первого деплоя. Необходимо перейти в браузер и обновить страницу. Вы должны увидеть тот же “Hello world”, однако, уже более технологичный.
Навигация
В JSF 1.2 навигационные правила явно определялись в faces-config.xml. В JSF 2 у нас есть альтернатива – неявная навигация. Например, если контроллер (управляемый бин, ManagedBean) вернул строку “response”, она автоматически мапится на файл /response.xhtml.
Давайте немного изменим greeting.xhtml, добавив в тело (body) следующий код:
<h:form id="form"> <h:commandLink action="#{sampleBean.storeMessage}">Go to hello world</h:commandLink> </h:form>
Здесь мы создали форму с командной ссылкой (есть еще не командная), которая выполняет POST формы, в результате чего выполняется метод storeMessage класса SampleBean. Этот метод получает сообщение из нашего ресурсного бандла и возвращает строку “response”, поэтому JSF рендерит страницу response.xhtml.
Класс SampleBean приведен ниже:
package ru.topcode; import javax.faces.bean.ManagedBean; import javax.faces.context.FacesContext; import java.util.ResourceBundle; @ManagedBean public class SampleBean { private String message; public String storeMessage() { FacesContext context = FacesContext.getCurrentInstance(); ResourceBundle bundle = context.getApplication().getResourceBundle(context, "msgs"); message = bundle.getString("hello.world"); return "response"; } public String getMessage() { return message; } }
Страница response.xhtml выглядит так:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html"> <h:head> <title>Hello JSF Response</title> </h:head> <h:body> Message: #{sampleBean.message} </h:body> </html>
Теперь можно выполнить Redeploy и посмотреть как все работает.
Вот и все. Здесь мы научились создавать JSF2-web-приложения, работать с ресурсами и немного изучили технологию навигации.






#1 by Gorynych on 13 Апрель 2010 - 12:50
Quote
Спасибо, статья хорошая, не дочитал.
Судя по всему, она ориентирована на тех, кто никогда не работал с JSF (это, типа, я), но сразу начинает описывать “как”, а не “что”. )) Мне было бы интересно узнать про JSF, но не вникать в то, _как_ делать непонятно _что_.
#2 by Дмитрий Леонтьев on 13 Апрель 2010 - 14:51
Quote
Здравствуйте, Gorynych. А что именно вы хотели бы узнать о JSF? JSF – это спецификация. Часть JEE. С помощью JSF можно делать web-приложения. Что вас еще интересует в отношении “что”?
Что значит непонятно “что”? Как раз таки очень даже понятно – web-приложения. А как их делать, по крайней мере с чего начать, я и описал в этой и еще нескольких статьях.
Если вас конкретно интересуют какие-то вопросы, задавайте, я постараюсь ответить.
Да и блог мой больше практической направленности. Прочитать что можно сделать с помощью JSF можно на многочисленных форумах, на которых обсуждают возможности JSF и сравнивают его с различными фреймворками, типа Struts. А вот почитать на русском языке “как” разработать проект с использованием JSF 2, негде. Поэтому и возникла эта статья.
Pingback: Tweets that mention Основы JSF 2.0 | Java EE Dev -- Topsy.com
#3 by Gorynych on 14 Апрель 2010 - 13:00
Quote
С помощью нотпада тоже можно делать web-приложения.
Ok, я понял.
)) Тогда меня просто ввело в заблуждение название, и просто мои ожидания не соответствовали действительности. Просто, я ожидал получить описание того, что из себя представляет JSF – алгоритм, структуру, архитектуру etc. Описание того, зачем это вообще надо… А на деле – всё, что написано до подзаголовка “Создание главной страницы” – про Идею, Томкет и Мавен.
#4 by Дмитрий Леонтьев on 14 Апрель 2010 - 15:06
Quote
Ну ладно, с фразой “С помощью JSF можно делать web-приложения” я погорячился
Правильнее будет так: “На основе JSF можно делать web-приложения”.
Да, вы правы наверно. Действительно не удачное название для статьи. Но менять уже не буду
Про структуру и архитектуру JSF скоро напишу статью.
#5 by dimasafo on 17 Апрель 2010 - 0:30
Quote
> “Если в тэге html в определении пространств имен xmlns у вас всё красное,
нажмите Alt + Enter и выберите пункт Enable Facelets Support.
Теперь IDEA знает что вы работаете с JSF-проектом и больше капризничть не будет.”
У меня не всё красное, а только этот адрес “http://java.sun.com/jstl/core”, и при
курсоре на нем и нажатии Alt + Enter пункта “Enable Facelets Support” ВОБЩЕ НЕТ!!!
Что бы это значило? Нужна ваша помощь.
#6 by Дмитрий Леонтьев on 17 Апрель 2010 - 12:59
Quote
Возможно, что по каким-то причинам у вас отсутствует зависимость
Это наиболее вероятная причина вашей проблемы, но по вашему описанию точно сказать не возможно. Напишите какое сообщение отображает IDEA при наведении на ошибку курсора, что предлагает Alt + Enter?
#7 by Дмитрий on 21 Апрель 2010 - 21:04
Quote
Спасибо за статью, я использую JSF1.2, мне интересны отличия JSF2.
Но при выполнии этого кода возникли проблемы: xhtml-файлы не рендерят теги jsf html, страница так и выводит исходный код неизменным, как будто FacesServlet отсутствует. Использую Glassfish2.1, попробовал убрать все зависимости из pom.xml и добавил в web.xml:
javax.faces.DEFAULT_SUFFIX
.xhtml
результаты те же. xhtml игнорируется фэйсисами
#8 by Дмитрий Леонтьев on 21 Апрель 2010 - 21:41
Quote
Здавствуйте, Дмитрий. Затрудняюсь ответить на ваш вопрос т.к. ни с Glassfish ни с JSF 1.2 не работал.
Для Glassfish 2.1, насколько я знаю, нужно установить обновление, которое добавляет в Glassfish поддержку JSF 1.2 и выше.
Также, при использовании Glassfish, библиотеки jsf-api и jsf-impl должны лежать в lib сервера, а в war их включать не нужно.
#9 by Ralph on 6 Май 2010 - 14:39
Quote
Я нашел то что искал…спс!
#10 by Stolho on 6 Июль 2010 - 18:24
Quote
Интересует, на сколько реально создавать сайты с помощью JSF с чистым xhtml кодом на выходе и чпу?
Я имею в виду, чтобы верстка была современная, легкая, валидная, а не таблицы и куча ненужного кода. Код был дружественный для поисковиков и т.п. И как обстоят дела с версткой тех же сайтов под JSF?
#11 by Pavel on 20 Июль 2010 - 22:19
Quote
Здравствуйте Дмитрий! Отличная, вводная статья. Я только начинаю вникать в JSF и у меня возник такой вопрос. Привильно ли будет, если просто использовать мапинг:
Faces Servlet
/
и не использовать стартовую JSP страницу? Вариант вполне работоспособный, но меня интересует, почему везде советуют отводить для JSF отдельный контекст. Заранее спасибо.
#12 by Дмитрий Леонтьев on 21 Июль 2010 - 9:25
Quote
Здравствуйте!
To Stolho: Верстка страниц при разработке с использованием JSF ни чем не отличается от верстки при использовании других фреймворков, да и вообще, она ни чем не отличается от верстки обычной xhtml-страницы не в контексте JSF. Более того, с JSF вы получаете дополнительные преимущества, т.к. он позволяет создавать композитные компоненты, шаблоны, декораторы и т.д.
С ЧПУ пока не разбирался, но есть несколько интересных Open Source проектов на эту тему:
http://www.tuckey.org/urlrewrite/
http://ocpsoft.com/prettyfaces/
To Pavel: Использование маппинга /* работает нормально и не вижу ни каких противопоказаний использования этого подхода.
Почему делают index.jsp с редиректом?
Если вы создадите маппинг
то первая загруженная страница (http://localhost:8080/myapp/) не будет обработана сервлетом Faces Servlet, дерево компонентов не построится и в лучшем случае вы увидите страницу index.xhtml без JSF-компонентов. Для того, чтобы запрос обработался сервлетом Faces Servlet, нужно чтобы URL соответствовал паттерну /faces/*
Т.е. чтобы правильно загрузить index.xhtml, нужно добавить в web.xml такие строки
#13 by idkfa on 6 Август 2010 - 18:27
Quote
index.jsp с редиректом не нужна вообще! Зачем включать в стек вызовов еще и JspServlet?
Если задан маппинг /faces/*, то достаточно в welcome-file-list добавить /faces/greeting.xhtml.
#14 by Art on 6 Ноябрь 2010 - 19:52
Quote
Добрый день. Статья очень понравилась и возник вопрос. Если используется несколько языков(ru,en) как в конфиге это сделать понятно, но как сделать что бы пользователь, например, при нажатие на ссылку перешёл к другому языку. И с файлами properties как они в таком случае должны называться? ведь по умолчанию, обычно, имя без окончания соответствует _en.
#15 by Дмитрий Леонтьев on 7 Ноябрь 2010 - 19:52
Quote
Здравствуйте, Art! Рад что статья Вам понравилась. Если используется несколько языков, то конфиг может быть следующим:
Здесь default-locale определяет какая локаль будет использоваться по умолчанию (а значит и какой суффикс properties будет выбран, в данном случае _en).
Изменить программно локаль можно примерно так:
В XHTML:
Это пример из книги Хорстмана Core JSF.
Файлы properties должны называеться как обыно (_en, _ru). Если не указываете default-locale, то, насколько я знаю, по умолчанию используется properties без суффикса. А вообще локаль выбирается по данным из response. Я когда экспериментировал, то использовал возможность Firefox: Инструменты -> Настойки -> Содержимое -> Языки -> Выбрать, там изменял язык и смотрел как работает мое приложение.
Успехов.
#16 by Alex on 26 Ноябрь 2010 - 17:58
Quote
Дима, а как сделать динамическую смену локали!метод который описали вы, не работает!Походу в f:view нужно выставлять локаль.Мне этот способ не нравится.Может есть что-то другое.если нет, то покажите как правильно это делать.И смена локали происходит при обновлении страницы,вроде. можно как то сделать без обновления?
#17 by hayao on 1 Декабрь 2010 - 19:47
Quote
у заработало только после добавления параметра к аннотации @ManagedBean(name = “sampleBean”)
#18 by Armen on 2 Декабрь 2010 - 1:42
Quote
Annotacia @Named(“localeChanger”), eto ne anotacia JSF, a iz biblioteki javax.inject(weld), eto kogda vashe prlijenie rabotaet pod appl server Glafish, ili v JBoss 6, a esli pod web server tomcat nado ispolzovat
@ManagedBean(name = “mybean”)
i potom, vse bini doljni bit serializable,
i na posledok, dlja razrabotki JSF, luchshe vsego ispolzovat NetBeans 6.8/6.9/7
#19 by Armen on 2 Декабрь 2010 - 1:44
Quote
Ja podgotovil odin malenki proect, v katrom vse skonfigurirovano
mojete skachat
https://docs.google.com/leaf?id=0By9WO6_mm164YWRiODUyYjEtMGQ5MS00NzE1LThkZWUtYWI5ZjQ1ZGJmODEx&hl=en
tam i help file, vnimatelno chitajte i ispolzovajte
#20 by Дмитрий Леонтьев on 5 Январь 2011 - 2:04
Quote
Здравствуйте, Armen! Спасибо за проект. Всем кто хочет быстро начать создавать проекты с использованием JSF 2 и JPA 2 рекомендую скачать и изучить.
#21 by Masterov Alexander on 1 Март 2011 - 14:21
Quote
Программирую боле 30 лет. На Java – с 1996 года.
Я – фанат Java, но – первой версии. (Ява первая – гениальный продукт, который опередил все технологии на десятилетия.) Но чем дальше – тем Java хуже. Яркий пример тому – продукты JetBrains. Попробуйте представить себе топор, пилу, рубанок, гвоздодёр… в виде одного инструмента, и вы получите JetBrains. С помощью этого инструмента можно сгенерить ВСЁ, и – ничего, поскольку интерфейс перегружен и прежде чем разберёшься в нём – состаришься. Это первое.
Второе: нужно иметь собственный сервер (арендовать хостинг не получится), чтоб воспользоваться выше изложенным. Поэтому сервисы будем создавать на PHP, хотя и – противно это делать, а JetBrains – нам не не пригодится, увы.
#22 by nik on 16 Март 2011 - 13:55
Quote
2Masterov Alexander: а какое это имеет отношение к теме? поднять свой сервер проще во много раз чем разобраться в технологии ..
зы.. жду продолжения статей )
#23 by Ddrad on 13 Октябрь 2011 - 11:12
Quote
Добрый день, Дмитрий, во-первых спасибо за статью, реально помогло разобраться с построением web-приложений с помощью java. Только вот на данный момент после установки редирека на greeting.xhtml браузер выдает следующее
type: Status report
message: Servlet Faces Servlet is currently unavailable
description: The requested service (Servlet Faces Servlet is currently unavailable) is not currently available.
в чем может быть дело?
#24 by DRON on 26 Декабрь 2011 - 1:25
Quote
Type your comment here
Всё равно, это гораздо продуктивней, чем самому изобретать “топор, молоток и прочую хрень”….
Имхо стапёрам уже тяжело осваивать что-то новое, не в обиду сказано!