|
Java форум JavaTalks форум программистов
|
|
|
|
| Предыдущая тема :: Следующая тема |
| Автор |
Сообщение |
Stranger : 17 Новичок
|
Янв 05, 2012 13:55 |
|
|
Доброго дня!
Изучаю JSF 2.0 по книге Гери, Хорстманна - JavaServer Faces
Меня интерисует вопрос - почему при использовании аннотации @Named у меня возникает ошибка:
| Цитата: |
| index.xhtml @22,63 value="#{quizBean.answer}": Target Unreachable, identifier 'quizBean' resolved to null |
Но, при использовании аннотации @ManagedBeans(name="quizBean")
Все в порядке.
В интернете нашел информацию, что аннотация @ManagedBean более старая, и что @Named может не поддерживаться старыми библиотеками. Но, я установил все новое.
Так же, в книге говориться, что аннотация @Named применима к CDI бинам, а @ManagedBean к JSF
Вот код:
index.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:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
<h:head>
<title>#{msgs.title}</title>
</h:head>
<h:body>
<h:form>
<h3>#{msgs.heading}</h3>
<p>
<h:outputFormat value="#{msgs.currentScore}">
<f:param value="#{quizBean.score}" />
</h:outputFormat>
</p>
<p>#{msgs.guessNext}</p>
<p>#{quizBean.current.sequence}</p>
<p>
#{msgs.answer}
<h:inputText value="#{quizBean.answer}" />
</p>
<p><h:commandButton value="#{msgs.next}" /></p>
</h:form>
</h:body>
</html> |
QuizBean.java
| Код: |
package server;
import java.util.ArrayList;
import javax.faces.bean.SessionScoped;
import javax.inject.Named;
@Named
@SessionScoped
public class QuizBean {
private ArrayList<ProblemBean> problems = new ArrayList<ProblemBean>();
private int currentIndex;
private int score;
public QuizBean() {
problems.add(
new ProblemBean(new int [] {3,1,4,1,5}, 9)); // цифры числа pi
problems.add(
new ProblemBean(new int [] {1,1,2,3,5}, 8)); // последовательность Фибоначчи
problems.add(
new ProblemBean(new int [] {1,4,9,16,25}, 36)); // квадраты
problems.add(
new ProblemBean(new int [] {2,3,5,7,11}, 13)); // простые числа
problems.add(
new ProblemBean(new int [] {1,2,4,8,16}, 32)); // степени 2
}
public void setProblems(ArrayList<ProblemBean> newValues) {
this.problems = newValues;
currentIndex = 0;
score = 0;
}
public int getScore() {
return this.score;
}
public ProblemBean getCurrent() {
return this.problems.get(this.currentIndex);
}
public String getAnswer() {
return "";
}
public void setAnswer(String newValue) {
try {
int answer = Integer.parseInt(newValue.trim());
if (getCurrent().getSolution() == answer) {
score++;
}
currentIndex = (++currentIndex) % problems.size();
} catch (NumberFormatException ex) {
}
}
} |
Так как только начал изучение JSF, в голове присутствует небольшая кашка. Помогите разобраться пожалуйста
сервер GlassFish 3.1.1 |
|
|
|
 |
Mam(O)n : 61 Новичок
|
Янв 05, 2012 14:17 |
|
|
В этой книге не сказано самое главное. Чтобы включить поддержку JSR 299: Contexts and Dependency Injection нужно в проект запилить дескриптор beans.xml (в каталог WEB-INF или META-INF, зависит от типа сборки проекта), достаточно минимального содержания:
| Код: |
<?xml version="1.0" encoding="UTF-8"?>
<javaee:beans xmlns:javaee="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/beans_1_0.xsd ">
</javaee:beans>
|
[/code] |
|
|
|
 |
Stranger : 17 Новичок
|
Янв 05, 2012 15:47 |
|
|
Ага. А где можно почитать про beans.xml и вообще найти больше информации по JSF? Или только с опытом?
В JSR-299 я кстати не нашел упоминаний про beans.xml рядом с аннотацией @Named. Может потому, что английский пока плохо знаю. Оно там есть?
После вставки в файл beans.xml приведенного Вами содержимого, ошибка исчезла. Но, значение
| Код: |
<h:outputFormat value="#{msgs.currentScore}">
<f:param value="#{quizBean.score}" />
</h:outputFormat> |
Перестало обновляться. Так же, после нажатия на кнопку перестало меняться содержимое задания, т.е.
| Код: |
| <p>#{quizBean.current.sequence}</p> |
Я пока почитаю JSR-299 . Можете дать мне информацию, которая поможет мне решать такие проблемы? |
|
|
|
 |
Mam(O)n : 61 Новичок
|
Янв 05, 2012 16:05 |
|
|
| Stranger писал(а): |
В JSR-299 я кстати не нашел упоминаний про beans.xml рядом с аннотацией @Named. Может потому, что английский пока плохо знаю. Оно там есть?
|
| Цитата: |
12.1. Bean archives
Bean classes of enabled beans must be deployed in bean archives.
• A library jar, EJB jar, application client jar or rar archive is a bean archive if it has a file named beans.xml in the
META-INF directory.
• The WEB-INF/classes directory of a war is a bean archive if there is a file named beans.xml in the WEB-INF directory
of the war.
• A directory in the JVM classpath is a bean archive if it has a file named beans.xml in the META-INF directory.
|
| Цитата: |
Я пока почитаю JSR-299 . Можете дать мне информацию, которая поможет мне решать такие проблемы? |
Ну могу порекомендовать почитать вводную от разработчика эталонной реализации http://docs.jboss.org/weld/reference/latest/en-US/html/, которая и используется в glassfish. Ну и конечно же оригинал http://download.oracle.com/otn-pub/jcp/web_beans-1.0-fr-eval-oth-JSpec/web_beans-1_0-fr-eval-spec.pdf |
|
|
|
 |
Mam(O)n : 61 Новичок
|
Янв 05, 2012 16:09 |
|
|
| Stranger писал(а): |
Перестало обновляться. Так же, после нажатия на кнопку перестало меняться содержимое задания |
Не вникал в суть конкретной проблемы, но хочу предостеречь, что при использовании бинов CDI, аннотации @SessionScoped и т.п. надо брать из пакета javax.enterprise.context, а не из javax.faces.bean. Сам очень часто на эти грабли нарывался, когда IDE автоимпорт делало не тот, который нужно. |
|
|
|
 |
Stranger : 17 Новичок
|
Янв 05, 2012 23:14 |
|
|
Да, точно! Потом возникла ошибка
| Цитата: |
| Error occurred during deployment: Exception while loading the app : WELD-000072 Managed bean declaring a passivating scope must be passivation capable. Bean: Managed Bean [class server.QuizBean] with qualifiers [@Any @Default @Named] |
но после implements java.io.Serializable; все заработало. Спасибо[/quote] |
|
|
|
 |
Using_System : 36 Новичок
|
Мар 26, 2012 10:59 |
|
|
Помогите, пожалуйста. Застрял на месте...
Как вообще правильно составить простое приложения, например по вот этому примеру: http://www.vogella.de/articles/JavaServerFaces/article.html#firstjsf - приложение с конвертером температуры
Делаю без мавена - не хочет работать переход по страницам
Делаю с мавеном: если просто maven-archetype-webapp - то нет файла faces-config.xml и я потом не могу привязать бин созданный (вот как в этом примере http://www.javaserverfaces.org/get-started выводит потом #{welcome.message} в браузере), если создаю appfuse-basic-jsf
| Код: |
| mvn archetype:generate -B -DarchetypeGroupId=org.appfuse.archetypes -DarchetypeArtifactId=appfuse-basic-jsf-archetype -DarchetypeVersion=2.1.0 -DgroupId=com.mycompany -DartifactId=myproject -DarchetypeRepository=http://oss.sonatype.org/content/repositories/appfuse |
то потом, при попытке импортировать в еклипс mvn eclipse:eclipse -Dwtpversion=2.0 возникает ошибка , если с помощью плагина m2 то pom.xml не находит все нужное и проект даже не определяет гласфиш, хотя в пом его прописыва... Проект естественно не запускается.
Подскажите, где я лезу не в те дебри, и как правильно стоздать проект jsf с помощью maven который будет работать? |
|
|
|
 |
stim644 : 65 Новичок
|
Мар 26, 2012 14:51 |
|
|
ЗАбей ты про beans.xml, анотации ведь же для этого и придумали, чтобы не использовать большое количество xml файлов  |
|
|
|
 |
Using_System : 36 Новичок
|
Апр 01, 2012 21:37 |
|
|
| Цитата: |
| ЗАбей ты про beans.xml, анотации ведь же для этого и придумали, чтобы не использовать большое количество xml файлов |
А где можно по-попдробней об этом разобраться?
Вот как по документации http://docs.oracle.com/javaee/6/tutorial/doc/bnadx.html так еще и дополнительный файл конфигурации для глассфиш... Я запутался... И все равно лчуше с Мавеном, не так ли, у них в примерах максимум ант, а это же предшественник мавен и все сейчас юзают мавен?
Уважаемые, те, кто опытный разработчик в JavaEE, в технологии JSF в часности, кто сторит и деплоит приложения используя Maven, подскажите материал, по которому я смогу разобраться, пожалуйста! В документации оракл четко расписано все по поводу JavaEE, но практические примеры кажутся слишком "отдаленными" от реальности, или я чего то не дочитал? |
|
|
|
 |
stim644 : 65 Новичок
|
Апр 02, 2012 9:20 |
|
|
| Наверно в Core JavaServer Faces, 3rd Edition. Есть Core JavaServer Faces, 2rd Edition на русском. |
|
|
|
 |
Using_System : 36 Новичок
|
Апр 03, 2012 19:44 |
|
|
Спасибо за ответы! С настройкой среды, деплоем и основами разобрался
http://www.javaserverfaces.org/get-started - вот здесь CDI приложение - и глассфиш работает с помощью команды мавен
| Код: |
| mvn package embedded-glassfish:run |
Разобрался немного с web.xml, как сделать по умолчанию стартовую страниц, указать возможные расширения...
Буду глубже копать в Core JavaServer Faces, 3rd Edition - думаю найду ответы на многие вопросы. Вот например сейчас застрял на том, что получаю ошибку
| Код: |
| Target Unreachable, identifier 'helloWorld' resolved to null |
- http://stackoverflow.com/questions/4845041/target-unreachable-identifier-resolved-to-null здесь ссылаются на beans.xml, у меня он имеет вид:
| Код: |
<?xml version="1.0" encoding="UTF-8"?>
<!--
The contents of this file is permitted to be empty.
The schema definition is provided for your convenience.
-->
<beans 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/beans_1_0.xsd">
</beans>
|
Почему возникает такая ошибка? |
|
|
|
 |
Using_System : 36 Новичок
|
Апр 07, 2012 23:06 |
|
|
| Цитата: |
All JSF pages are passed to the Faces servlet that is a part of the JSF implemen-
tation code. To ensure that the correct servlet is activated when a JSF page is
requested, the JSF URLs have a special format. In our configuration, they have
a prefix /faces. The servlet-mapping element ensures that all URLs with that prefix
are processed by the Faces servlet.
For example, you cannot simply point your browser to http://localhost:8080/
login/index.xhtml. The URL has to be http://localhost:8080/login/faces/index.xhtml.
The mapping rule activates the Faces servlet, which is the entry point to the JSF
implementation. The JSF implementation strips off the /faces prefix, loads the
index.xhtml page, processes the tags, and displays the result.
|
Core JavaServer Faces, 3rd Edition
| Код: |
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping> |
не хватало  |
|
|
|
 |
|
|
Страница 1 из 1
|
Список форумов
-> Java и веб технологии |
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|