corner imagecorner image
FeaturesPluginsDocs & SupportCommunityPartners

Контекст и управляемые компоненты

В этом руководстве рассматривается создание приложения в среде IDE NetBeans с функциональностью разработки визуальных веб-приложений JSF для демонстрации использования контекстов приложение, сеанс и запрос в целях управления объектами приложения. Под контекстом понимается доступность (или контекст) объекта и его соответствующий жизненный цикл в веб-приложении.

Создаваемое в этом руководстве веб-приложение использует объект в контексте приложения для подсчета голосов, а объект в контексте сеанса – для проверки того, что пользователь в течение одного сеанса голосует только один раз. Объект контекста запроса используется для отображения времени голосования пользователя. Данные времени сохраняются в контексте запроса, поскольку приложению не требуется это значение после передачи возвращаемого значения в обозреватель клиента.

Предполагаемая продолжительность: 45 минут

Содержание

Содержимое на этой странице относится к среде IDE NetBeans 6.0 и 6.1  

Для работы с этим руководством требуется программное обеспечение и ресурсы, перечисленные ниже.

Программное обеспечение или ресурс Требуемая версия
Среда IDE NetBeans Web & Java EE, версия 6.1 или 6.0
Комплект для разработчика на языке Java (JDK) версия 6 или
версия 5
Элементы JavaServer Faces
Платформа Java EE
1.2 с Java EE 5* или
1.1 с J2EE 1.4
Сервер приложений GlassFish V2
База данных TRAVEL Не требуется

* Для получения преимуществ благодаря функциональности Java EE 5 в среде IDE NetBeans используйте сервер приложений, который является полностью совместимым со спецификацией Java EE 5, например, сервер приложений GlassFish V2 UR2. В случае использования другого сервера см. заметки о выпуске и часто задаваемые вопросы для получения информации об известных проблемах и обходных решениях. Для получения подробной информации о поддерживаемых серверах и платформе Java EE см. заметки о выпуске.

Примечание для пользователей среды IDE NetBeans 6.1:

  • При создании проекта в NetBeans 6.1 доступны новые параметры, для которых можно оставить значения по умолчанию. Например, флажок Use Dedicated Folder for Storing Libraries может быть оставлен неустановленным.
  • В среде IDE NetBeans 6.1 поддерживается привязка по запросу. В тех местах, где элементы требуют написания кода Java, теперь следует вручную добавить атрибут привязки к элементам в визуальном веб-приложении JSF. Для этого щелкните правой кнопкой мыши каждый элемент и выберите "Add Binding Attribute". Для получения дополнительных сведений см. вики-страницу On-demand Binding Attribute.

Описание контекстов

До тех пор, пока пользователь остается на странице, значения элемента сохраняются даже в случае повторного отображения страницы, например, если пользователь нажимает кнопку, которая возвращает значение "null". Однако если пользователь закрывает страницу, значения элемента утрачиваются.

Для обеспечения доступности значений для других страниц или для той же страницы при возврате к ней пользователя необходимо сохранить значения. При создании проекта в среде IDE создается три управляемых компонента для сохранения значений:

  • RequestBean1
  • SessionBean1
  • ApplicationBean1

На следующем рисунке представлено окно "Navigator" с управляемыми компонентами по умолчанию.

Управляемые компоненты по умолчанию

Управляемый компонент является объектом JavaBeans, который создается веб-приложением JavaServer Faces и сохраняется в контексте запроса, контексте сеанса или в контексте приложения. Веб-приложение сохраняет RequestBean1 в контексте запроса, SessionBean1 в контексте сеанса, а ApplicationBean1 – в контексте приложения.

Для добавления свойства к одному из этих управляемых компонентов дважды щелкните компонент в окне "Navigator" и введите объявление свойства в исходный код. Щелкните правой кнопкой мыши в любом месте в редакторе Java и выберите "Refactor > Encapsulate Fields". Затем выберите свойство из списка, выберите методы, которые требуется добавить, и нажмите кнопку "Refactor".

Перед созданием свойства компонента для сохранения значения необходимо определить соответствующий контекст для значения свойства. Поскольку многие пользователи могут получить доступ к веб-приложению одновременно, требуется использовать наименьший контекст для обеспечения оптимального распределения ресурсов сервера. На следующем рисунке показана продолжительность каждого типа контекста.

  • Контекст приложения длится до тех пор, пока сервер не завершит работу приложения. Значения, которые сохраняются в компоненте приложения, доступны для каждого сеанса и каждого запроса, использующих то же отображение приложения.
  • Контекст сеанса начинается при первом доступе пользователя к странице в веб-приложении и заканчивается при наступлении тайм-аута сеанса вследствие неактивности, либо если сеанс определяется веб-приложением как недействительный, например, путем вызова session.invalidate().
  • Контекст запроса начинается в момент передачи страницы пользователем и заканчивается после полной визуализации результата, вне зависимости от конкретной страницы.
Контексты веб-приложения

Например, предположим, что веб-приложение имеет раскрывающийся список с единицами измерений (пиксели, сантиметры и дюймы). Может потребоваться сохранить список вариантов выбора в ApplicationBean1 для его совместного использования во всех параллельных пользовательских сеансах. С другой стороны, можно сохранить имя пользователя в SessionBean1 для обеспечения его доступности всем страницам, которые открывает пользователь в рамках данного сеанса. Если информация после истечения времени жизни текущего запроса не требуется, можно сэкономить место путем вставки свойства в RequestBean1.

Предупреждение: Невозможно использовать компонент запроса, если элемент <redirect> включен в элемент <navigation-case> правила перехода. (Для просмотра этих правил нажмите кнопку "XML" в редакторе переходов на странице.) При передаче страницы элемент <redirect> перенаправляет страницу и завершает запрос до того, как любое из значений, сохраненных в компоненте запроса, будет использовано на последующей странице.

При создании страницы в среде IDE исходный код Java для компонента страницы содержит методы для получения доступа к объектам RequestBean1, SessionBean1 и ApplicationBean1. Для получения доступа к свойствам этих управляемых компонентов используется код, аналогичный операторам в следующем фрагменте кода.

Примечание: В среде IDE NetBeans 6.1 поддерживается привязка по запросу. В тех местах, где элементы требуют написания кода Java, теперь следует вручную добавить атрибут привязки к элементам в визуальном веб-приложении JSF. Для этого щелкните правой кнопкой мыши каждый элемент и выберите "Add Binding Attribute". Для получения дополнительных сведений см. вики-страницу On-demand Binding Attribute.

Пример кода 1: получение доступа к свойству компонента приложения
ApplicationBean1 appBean = getApplicationBean1();
Option[] choices = appBean.BallotOptions();

Веб-приложение создает экземпляр управляемого компонента при первом обращении страницы к свойству в управляемом компоненте в рамках контекста компонента. Например, экземпляр объекта SessionBean1 не существует для сеанса пользователя до перехода пользователя на страницу со ссылкой на свойство SessionBean1. Экземпляр объекта ApplicationBean1 впервые создается при обращении страницы из любого сеанса к компоненту приложения и сохраняется в течение всего периода выполнения веб-приложения.

Рекомендация: Для добавления дополнительных управляемых компонентов:

  1. В окне "Projects" разверните узел "Source Packages" и щелкните правой кнопкой мыши узел пакета.
  2. Выберите "New > Other", выберите категорию "JavaServer Faces" и контекст в узле "File Types", а затем нажмите кнопку "Next".
  3. Введите имя нового управляемого компонента в поле "File Name" и нажмите кнопку "Finish".

    Новый управляемый компонент появится в окне "Projects" в узле "Source Packages".

Добавление свойств к управляемым компонентам

Для страниц в этом веб-приложении требуется доступ к следующим значениям, создаваемым в этом разделе:

  • ballotOptions. Свойство массива, содержащее список вариантов выбора для голосования. Поскольку список остается одинаковым для всех сеансов, это свойство входит в контекст приложения.
  • tally. Свойство хеш-кода, которое используется для сбора всех голосов в течение сеанса. Поскольку данное значение должно сохраняться для всех сеансов, это свойство входит в контекст приложения.
  • hasVoted. Логическое свойство для проверки того, голосовал ли конкретный пользователь. Поскольку для приложения требуется сохранять это значение для множественных запросов в одном сеансе, это значение сохраняется в контексте сеанса.
  • timestamp. Date Свойство, в котором приложение записывает время голосования пользователя для использования на следующей странице. Поскольку приложению это значение не требуется после передачи следующей страницы, это значение сохраняется в контексте запроса.

Для добавления свойств к управляемым компонентам выполните следующие действия.

  1. Выберите в главном меню "File > New Project".
  2. В мастере создания проекта выберите "Web" в списке "Categories" и "Web Application" в списке "Projects", а затем нажмите кнопку "Next".
  3. Присвойте проекту имя Scopes.

    Примечание для пользователей среды IDE NetBeans 6.1: При создании проекта в NetBeans 6.1 доступны новые параметры, для которых можно оставить значения по умолчанию. Например, флажок "Use Dedicated Folder for Storing Libraries" может быть оставлен неустановленным.

  4. При использовании среды IDE NetBeans 6.1 нажмите кнопку "Next"; в противном случае перейдите к действию 5.
  5. На экране "Frameworks" установите флажок "Visual Web JavaServer Faces" и нажмите кнопку "Finish".

    В Visual Designer открывается страница "Page1.jsp" проекта "Scopes".
  6. В окне "Navigator" дважды щелкните ApplicationBean1.

    Откроется "ApplicationBean1.java" в режиме изменения.
  7. Затем добавьте свойства компонента "Application". В конструкторе public class ApplicationBean1 extends AbstractApplicationBean добавьте следующие объявления:
    private Option[] ballotOptions;
    private HashMap tally;
  8. Щелкните правой кнопкой мыши в редакторе Java и выберите "Fix Imports". Поскольку имеется несколько пакетов, содержащих класс "Option", появляется диалоговое окно "Fix Imports".

    • Для проекта Java EE 5 выберите com.sun.webui.jsf.model.Option.
    • Для проекта J2EE 1.4 выберите com.sun.rave.web.ui.model.Option.
  9. Щелкните правой кнопкой мыши в редакторе Java и выберите "Refactor > Encapsulate Fields".
  10. В диалоговом окне "Encapsulate Fields" установите флажки для создания методов получения и установки для свойств ballotOptions и tally, как показано на следующем рисунке.

    Диалоговое окно "Encapsulate Fields"
  11. Перейдите к методу init и добавьте в нижнюю часть метода следующий код, выделенный полужирным шрифтом.

    Пример кода 2: код, добавляемый к методу init компонента приложения
            // TODO - add your own initialization code here
            // populate ballot items
            ballotOptions = new Option[] {
                new Option("java", "Java Programming Language"),
                new Option("cpp", "C++"),
                new Option("fortran", "Fortran")
            };
    
            // Инициализация счетчиков для вариантов выбора при голосовании
            tally = new HashMap();
            for (int i=0; i < ballotOptions.length; i++) {
                this.tally.put(ballotOptions[i].getValue(), "0");
            }
  12. Добавьте следующие методы в конце файла перед последней закрывающей фигурной скобкой.

    Пример кода 3: методы подсчета голосов для компонента приложения
        /**
         * Vote counter for property tally.
         */
        public void incrementTallyFor(String category) {
            int count = getTallyFor(category);
            count++;
            this.tally.put(category, Integer.toString(count));
        }
    
        /**
         * Метод получения для значения при подсчете голосов свойства.
         * @param category HashMap key
         * @return Value to which the specified key is mapped
         */
        public int getTallyFor(String category) {
            String stringCount = (String) this.tally.get(category);
            if (stringCount == null) {
                return 0;
            } else {
                int count = Integer.valueOf(stringCount).intValue();
                return count;
            }
        }
    
  13. Нажмите комбинацию клавиш Ctrl-S для сохранения изменений и Ctrl-F4 для закрытия файла.
  14. В окне "Navigator" дважды щелкните SessionBean1. Откроется "SessionBean1.java" в режиме изменения.

    Примечание: Если окно "Navigator" закрыто, щелкните вкладку "Page1" в области изменения и нажмите кнопку "Design" на панели инструментов изменения. Окно "Navigator" в среде IDE отображается в режиме проектирования.
  15. Затем добавьте свойства сеансного компонента. В конструкторе public class SessionBean1 extends AbstractSessionBean добавьте следующее объявление:
    private boolean hasVoted;
  16. Щелкните правой кнопкой мыши в редакторе Java и выберите "Refactor > Encapsulate Fields".
  17. В диалоговом окне "Encapsulate Fields" установите флажки для создания методов получения и установки для свойства hasVoted и нажмите кнопку "Refactor".
  18. Перейдите к методу init и добавьте в нижнюю часть метода следующий код, выделенный полужирным шрифтом.

    Пример кода 4: код для добавления к методу сеансного компонента init
            // TODO - add your own initialization code here
            setHasVoted(false);
  19. Нажмите комбинацию клавиш Ctrl-S для сохранения изменений и Ctrl-F4 для закрытия файла.
  20. В окне "Navigator" дважды щелкните "RequestBean1". Откроется "RequestBean1.java" в режиме изменения.
  21. Добавьте свойства компонента запроса. В конструкторе public class RequestBean1 extends AbstractRequestBean добавьте следующее объявление:
    private java.util.Date timestamp;
  22. Щелкните правой кнопкой мыши в редакторе Java и выберите "Refactor > Encapsulate Fields".
  23. В диалоговом окне "Encapsulate Fields" установите флажки для создания методов получения и установки для свойства timestamp и нажмите кнопку "Refactor".
  24. Щелкните вкладку "Page1", а затем нажмите кнопку "Design" для "Page1". Проверьте, что в окне "Navigator" свойства в компоненте запроса, сеансном компоненте и компоненте приложения соответствуют свойствам, показанным на следующем рисунке.

    Свойства компонента запроса, сеансного компонента и компонента приложения

Создание начальной страницы

В этом разделе рассматривается процедура создания страницы, открытой в обозревателе и показанной на следующем рисунке. Если пользователь нажимает кнопку "Submit Vote", страница передает голос пользователя. Если пользователь проголосовал, кнопка отключается, что не позволяет пользователю проголосовать повторно в рамках одного сеанса.

Рис. 5: Страница "Page1"

Примечание: В среде IDE NetBeans 6.1 поддерживается привязка по запросу. В тех местах, где элементы требуют написания кода Java, теперь следует вручную добавить атрибут привязки к элементам в визуальном веб-приложении JSF. Для этого щелкните правой кнопкой мыши каждый элемент и выберите "Add Binding Attribute". Для получения дополнительных сведений см. вики-страницу On-demand Binding Attribute.

  1. Щелкните "Page1" на панели инструментов изменения.
  2. Перетащите элемент "Label" из раздела "Basic" окна "Palette" в верхнюю центральную часть страницы и измените текст метки на Reader's Poll: What Is Your Favorite Programming Language?.
  3. Разместите элемент "Radio Button Group" под элементом "Label".
  4. В окне "Properties" установите для свойства id элемента значение voteRBGroup.
  5. Щелкните правой кнопкой мыши элемент "Radio Button Group" и выберите в контекстном меню "Bind to Data".

    Появится диалоговое окно "Bind to Data".
  6. На вкладке "Bind to an Object" этого диалогового окна выберите "ApplicationBean1 > ballotOptions", а затем нажмите кнопку "OK".
  7. Перетащите элемент "Button" в область под элементом "Radio Button Group" и измените текст этого элемента на View Results.

    Примечание: Существует известная проблема, связанная с шириной элемента "Button" на основе JSF 1.2 в IE7. Обходным решением является размещение элемента "Button" в элементе структуры ("Grid Panel", "Group Panel" или "Layout Panel"). При изменении размеров элемента структуры автоматически изменяются размеры элемента "Button".

  8. В окне "Properties" установите для свойства id значение viewButton.
  9. Нажмите кнопку с многоточием кнопка с многоточием для свойства action, выберите из раскрывающегося списка "viewButton_action" и нажмите кнопку "OK".

    Средой IDE добавляется обработчик события viewButton_action, который возвращает значение "null".
  10. Перетащите элемент "Button" в область справа от кнопки "View Results" и измените текст этого элемента на Submit Vote.
  11. В окне "Properties" установите для свойства id значение voteButton.
  12. Нажмите кнопку с многоточием кнопка с многоточием для свойства disabled.

    Откроется диалоговое окно настройки привязки для этого свойства.
  13. В этом диалоговом окне выберите "Use Binding", нажмите кнопку "Bind to an Object", выберите "SessionBean1 > hasVoted", как показано на следующем рисунке, а затем нажмите кнопку "OK".

    <>Привязка отключенного свойства
  14. Дважды щелкните кнопку "Submit Vote".

    Средой IDE добавляется обработчик действия voteButton_action, после чего открывается исходный файл Java для страницы и отображается соответствующий метод.
  15. Замените тело метода следующим кодом, выделенным полужирным шрифтом.

    Пример кода 5: метод voteButton_action
        public String voteButton_action() {
    
            if (voteRBGroup.getSelected() == null) {
                return null;
            }
    
            // Данные подсчета сохраняются для всех пользовательских сеансов.
            String votedFor = voteRBGroup.getSelected().toString();
            getApplicationBean1().incrementTallyFor(votedFor);
    
            // Пользователь может проголосовать в течение сеанса только один раз.
            getSessionBean1().setHasVoted(true);
    
            // Временная метка после окончания следующего запроса не требуется.
            Date now = new Date();
            getRequestBean1().setTimestamp(now);
    
            return null;
        }
  16. Щелкните правой кнопкой мыши в исходном коде и выберите в контекстном меню "Fix Imports".
  17. Выберите java.util.Date в раскрывающемся списке "Date" и нажмите кнопку "OK".

Создание страницы результатов

Выполните следующую процедуру для создания страницы, открытой в обозревателе и показанной на следующем рисунке. На этой странице отображается текущее число голосов. Для получения наиболее актуальных данных по подсчету голосов пользователь может нажать кнопку "Refresh Results". При этом в число голосов будут включены голоса пользователей, добавленные с момента последнего просмотра страницы.

Результаты

Примечание: В среде IDE NetBeans 6.1 поддерживается привязка по запросу. В тех местах, где элементы требуют написания кода Java, теперь следует вручную добавить атрибут привязки к элементам в визуальном веб-приложении JSF. Для этого щелкните правой кнопкой мыши каждый элемент и выберите "Add Binding Attribute". Для получения дополнительных сведений см. вики-страницу On-demand Binding Attribute.

  1. В окне "Projects" щелкните правой кнопкой мыши узел "Web Pages" под проектом "Scopes", выберите "New > Visual Web JSF Page", присвойте странице имя Results и нажмите кнопку "Finish" для создания страницы.
  2. Перетащите элемент "Label" в верхнюю центральную область страницы "Results" и измените текст этого элемента на Results.
  3. Перетащите элемент "Button" в область слева от элемента "Label" и измените текст этого элемента на Home.
  4. Установите для свойства id элемента "Button" значение homeButton.
  5. Нажмите кнопку с многоточием кнопка с многоточием для свойства action, выберите "homeButton_action" в раскрывающемся списке "Handler" и нажмите кнопку "OK".
  6. Перетащите элемент "Button" в местоположение справа от элемента "Label" и измените текст этого элемента на Refresh Results.
  7. Установите для свойства id элемента "Button" значение refreshButton.
  8. Нажмите кнопку с многоточием кнопка с многоточием для свойства action, выберите "refreshButton_action" в раскрывающемся списке "Handler" и нажмите кнопку "OK".
  9. Перетащите элемент "Grid Panel" из раздела "Layout" окна "Palette" в область под элементом "Label".
  10. В окне "Properties" установите для свойства cellspacing значение 10, а для свойства columns – значение 1.
  11. Перетащите элемент "Static Text" в элемент "Grid Layout". Когда контур элемента "Grid Layout" будет обозначен сплошной синей линией, отпустите элемент "Static Text", как показано на следующем рисунке.

    Помещение элемента в элемент "Grid Panel"
  12. В окне "Properties" установите для свойства id элемента "Static Text" значение resultsST. Поле text оставьте пустым.
  13. Удалите флажок для свойства escape.

    В дальнейшем мы добавим код для помещения HTML в свойство text элемента. При установке для свойства escape значения "false" код HTML передается в обозреватель без изменений.
  14. Перетащите еще один элемент "Static Text" в элемент "Grid Panel" и отпустите этот элемент, когда контур элемента "Grid Layout" будет обозначен сплошной синей линией.
  15. Установите для свойства id элемента "Static Text" значение messageST. Поле text оставьте пустым.
  16. Щелкните "Java" на панели инструментов изменения для просмотра исходного кода Java для страницы.
  17. В окне "Navigator" дважды щелкните метод prerender для его открытия в редакторе Java, а затем добавьте следующий код, выделенный полужирным шрифтом.

    Пример кода 6: метод prerender
        public void prerender() {
          // Вывод на экран последних результатов опроса
          ApplicationBean1 appBean = getApplicationBean1();
          Option[] choices = appBean.getBallotOptions();
          String str = "<table border=\"0\" cellpadding=\"5\">";
          for (int i = 0; i < choices.length; i++) {
            int count =
              appBean.getTallyFor(choices[i].getValue().toString());
            str = str + "<tr><td>" +
              choices[i].getLabel() +
              "</td><td>" +
              count +
              "</td></tr>";
          }
          str = str + "</table>";
          resultsST.setText(str);
    
          RequestBean1 reqBean = getRequestBean1();
          Date timestamp = (Date) reqBean.getTimestamp();
          if (timestamp != null) {
            messageST.setText("Your vote was recorded at " +
              (String)DateFormat.getTimeInstance(DateFormat.LONG).format(
              timestamp));
          }
        }

    Этот код создает таблицу HTML, которая содержит подсчет для каждого голоса, и вставляет таблицу HTML в свойство text для первого элемента "Static Text". Если пользователь только что проголосовал, второй элемент "Static Text" отображает дату и время регистрации голоса.
  18. Щелкните правой кнопкой мыши в исходном коде и выберите в контекстном меню "Fix Imports".
  19. В раскрывающемся списке "Date" выберите java.util.Date.
  20. В раскрывающемся списке "Option" выберите вариант в соответствии с версией Java EE, используемой для проекта:

    • Для проекта Java EE 5 выберите com.sun.webui.jsf.model.Option.
    • Для проекта J2EE 1.4 выберите com.sun.rave.web.ui.model.Option.

Определение переходов по страницам

Выполните следующую процедуру для определения переходов по страницам при помощи кнопок, как показано на рисунке ниже.

Редактор потока операций на странице
  1. В области изменения щелкните вкладку "Results", а затем нажмите кнопку "Design" для просмотра страницы в Visual Designer.
  2. Щелкните правой кнопкой мыши в пустом месте на странице и выберите в контекстном меню "Page Navigation".

    В редакторе потока операций на странице откроется файл faces-config.xml.
  3. Щелкните символ "+" значка "Page1.jsp" для его увеличения.
  4. Перетащите "viewButton" к "Results.jsp" для создания соединительной линии между кнопкой и страницей "Results".
  5. Дважды щелкните метку соединительной линии для перехода в режим изменения, введите view results и нажмите клавишу Enter.
  6. Перетащите "voteButton" к "Results.jsp".
  7. Дважды щелкните метку соединительной линии для перехода в режим изменения, введите vote и нажмите клавишу Enter.
  8. Щелкните символ "+" на значке "Results.jsp" для его увеличения.
  9. Перетащите "homeButton" к "Page1.jsp".
  10. Дважды щелкните метку соединительной линии для перехода в режим изменения, введите home и нажмите клавишу Enter.

Выполнение приложения

Для разрешения открытия нескольких сеансов из одного обозревателя настройте приложение для завершения каждого сеанса после одной минуты неактивности. Затем разверните и запустите приложение.

  1. В окне "Files" разверните узел "Scopes > web >WEB-INF", как показано на следующем рисунке.

    Окно "Files" с выделенным файлом web.xml
  2. Дважды щелкните web.xml для открытия файла в редакторе.
  3. Введите 1 в текстовом поле "Session Timeout", как показано на следующем рисунке.

    Настройка тайм-аута сеанса в визуальном редакторе theweb.xml
  4. Сохраните изменения и закройте файл.
  5. Нажмите кнопку "Run Main Project" Run Project toolbar icon на основной панели инструментов.
  6. При появлении начальной страницы установите переключатель и выберите "Submit Vote".

    Обозреватель отображает страницу результатов. Обратите внимание, что на странице результатов показано время голосования пользователя.
  7. Для возврата к начальной странице нажмите кнопку "Home".

    Кнопка "Submit Vote" неактивна, поскольку пользователь уже проголосовал.
  8. Нажмите кнопку "View Results".

    Обратите внимание, что на странице результатов время голосования больше не отображается. Это вызвано тем, что предыдущий компонент запроса находится вне контекста, и был реализован новый компонент запроса.
  9. Подождите одну минуту до истечения времени ожидания сеанса. Затем введите следующий URL-адрес в адресную строку обозревателя и нажмите клавишу Enter для начала нового сеанса: http://localhost:8080/Scopes. Если настройки сервера отличаются от настроек по умолчанию, может потребоваться изменить порт 8080.
  10. Проголосуйте еще раз и проверьте результаты. Результаты должны включать первый голос.
  11. Если используется другое приложение обозревателя, запустите этот обозреватель, введите http://localhost:8080/Scopes в адресную строку обозревателя и нажмите клавишу Enter. Проголосуйте еще раз.
  12. В первом обозревателе на странице результатов нажмите кнопку "Refresh Results".

    Результаты должны включать голос из второго обозревателя.

Дополнительные упражнения

С помощью процедур, описанных в этом руководстве, создайте приложение, выводящее запрос на ввод имени пользователя. Добавьте страницу, отображающую количество уникальных пользователей, получивших доступ к веб-приложению.

Заключение

Компонент приложения, сеансный компонент и компонент запроса предназначены для хранения информации, используемой другими страницами.

  • Компонент приложения используется для данных, применяемых во всех пользовательских сеансов, как, например, статический список параметров для элемента "Drop Down List".
  • Сеансный компонент применяется для хранения информации, используемой другими страницами в рамках сеанса пользователя, такой как регистрационное имя пользователя.
  • Если информация требуется только для следующей страницы, применяется компонент запроса.

    Примечание: Невозможно использовать компонент запроса, если элемент <redirect> включен в элемент <navigation-case> правила перехода.

  • Экземпляры компонента запроса, сеансного компонента или компонента приложения создаются при обращении страницы к одному из ее свойств. Компонент уничтожается при завершении его контекста.
  • Для добавления свойства к сеансному компоненту щелкните правой кнопкой мыши узел "Session Bean" в окне "Outline" и выберите "Add > Property". Выполните аналогичные действия для добавления свойства к компоненту запроса или приложения.

Дополнительная информация


Дата последнего изменения страницы: 15 апреля 2008 г.



Bookmark this page

del.icio.us furl simpy slashdot technorati digg
Companion
Projects:
MySQL Database Server   GlassFish Community: an Open Source Application Server   Open Solaris  Open JDK: an Open SourceJDK   Mobile & Embedded Community     Sponsored by 
Sponsored by Sun Microsystems