Обычная версия
Java форум JavaTalks
форум программистов

Поиск   Пользователи   Группы   Регистрация 
 Профиль   Личные сообщения 

 Вход 

JSF, помогите разобраться
Список форумов
 ->  Java и веб технологии


 
Начать новую тему 
Предыдущая тема :: Следующая тема  
Автор Сообщение
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 - приложение с конвертером температуры
Делаю без мавена - не хочет работать переход по страницам Sad
Делаю с мавеном: если просто 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 файлов Smile
К началу Посмотреть профиль Отправить личное сообщение
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 
Ответить с цитатой
Спасибо за ответы! С настройкой среды, деплоем и основами разобрался Smile
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>
не хватало Sad
К началу Посмотреть профиль Отправить личное сообщение
 
Начать новую тему  Ответить на тему
Страница 1 из 1
Список форумов
 -> Java и веб технологии


 
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Java and all Java-related trademarks and logos are trademarks or registered trademarks of Oracle Corporation in the United States and other countries.
Это сайт не относится к фирме Oracle Corporation и не поддерживается ею.

© 2006-2010 www.javatalks.ru: форум java программистов
Используется скрипт phpBB © 2001, 2010 phpBB Group

Хостинг от bizname.ru