powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / JSF использование PhaseListener
10 сообщений из 10, страница 1 из 1
JSF использование PhaseListener
    #34495548
KBoris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет!

Очень нужна информация по использованию PhaseListener в JSF. Проблема в следующем, я взял из примера следующий класс PhaseListener-а:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
 package  org.cetco.web;

 import  javax.faces.application.NavigationHandler;
 import  javax.faces.context.FacesContext;
 import  javax.faces.event.PhaseEvent;
 import  javax.faces.event.PhaseId;
 import  javax.faces.event.PhaseListener;

/**
 *
 * @author BKetoev
 */
 public   class  CheckResourceListener  implements  PhaseListener{
    
    /** Creates a new instance of CheckResourceListener */
     public  CheckResourceListener() {
    }
    
     public  PhaseId getPhaseId( ) {
        System.out.println("+++++ CheckResourceListener getPhaseId");
         return  PhaseId.RESTORE_VIEW;
    }
    
     public   void  beforePhase(PhaseEvent event) {
        System.out.println("+++++ CheckResourceListener beforePhase");
    }
    
    
     public   void  afterPhase(PhaseEvent event) {
        System.out.println("+++++ CheckResourceListener afterPhase");
        FacesContext context = event.getFacesContext( );
         if  (!isEverythingOkay(context)) {
            NavigationHandler nh =
                    context.getApplication( ).getNavigationHandler( );
            nh.handleNavigation(context,  null , "Login.jsp");
        }
    }
    
     private   boolean  isEverythingOkay(FacesContext context) {
         boolean  result =true;
         return  result;
    }
}

faces-config.xml
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
<?xml version='1.0' encoding='windows-1251'?>
<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_1_2.xsd"
              version="1.2">
    
    <!-- Set  default  locale and add supported locales here...
  <application>
    <locale-config>
      < default -locale>en</ default -locale>
      <supported-locale>de</supported-locale>
      <supported-locale>fr</supported-locale>
      <supported-locale>es</supported-locale>
    </locale-config>
    <lifecycle>
        <phase-listener>org.cetco.web.CheckResourceListener</phase-listener>
    </lifecycle>
  </application>
  -->
    
</faces-config>

все деплоется, но при работе проги не вызваются методы PhaseListener-а.
Заранее благодарю за помощь!
...
Рейтинг: 0 / 0
JSF использование PhaseListener
    #34495606
Фотография Изя Шниперсон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Покажи исходник
JSP JSF
...
Рейтинг: 0 / 0
JSF использование PhaseListener
    #34495662
KBoris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Небольшой апдейт
В faces-config.xml была ошибка, все было закоментированно. текущая версия выглядит так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
<?xml version='1.0' encoding='windows-1251'?>
<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_1_2.xsd"
              version="1.2">
    
    <!-- Set  default  locale and add supported locales here...
  <application>
    <locale-config>
      < default -locale>en</ default -locale>
      <supported-locale>de</supported-locale>
      <supported-locale>fr</supported-locale>
      <supported-locale>es</supported-locale>
    </locale-config>-->
    <application>
        <lifecycle>
            <phase-listener>org.cetco.web.CheckResourceListener</phase-listener>
        </lifecycle>
    </application>   
    
</faces-config>

В результате имеем Exception
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
Timestamp:
	
 28 . 04 . 2007   14 : 32 : 21 . 336 
Log Level:
	
SEVERE
Logger:
	
javax.enterprise.system.container.web
Name-Value Pairs:
	
_ThreadID= 14 ;_ThreadName=httpWorkerThread- 4848 - 1 ;_RequestID=6c631d79-f5e5-41a1- 9587 -5c91f9c8718c;
Record Number:
	
 427 
Message ID:
	
WebModule[/FrontEnd]Exception sending context initialized event to listener instance of  class  com.sun.faces.config.ConfigureListener javax.faces.FacesException
Complete Message

Can't parse configuration file: jndi:/server/FrontEnd/WEB-INF/faces-config.xml: Error at line 15 column 16: cvc-complex-type.2.4.a: Invalid content was found starting with element 'lifecycle'. One of '{"http://java.sun.com/xml/ns/javaee":action-listener, "http://java.sun.com/xml/ns/javaee": default -render-kit-id, "http://java.sun.com/xml/ns/javaee":message-bundle, "http://java.sun.com/xml/ns/javaee":navigation-handler, "http://java.sun.com/xml/ns/javaee":view-handler, "http://java.sun.com/xml/ns/javaee":state-manager, "http://java.sun.com/xml/ns/javaee":el-resolver, "http://java.sun.com/xml/ns/javaee":property-resolver, "http://java.sun.com/xml/ns/javaee":variable-resolver, "http://java.sun.com/xml/ns/javaee":locale-config, "http://java.sun.com/xml/ns/javaee":resource-bundle, "http://java.sun.com/xml/ns/javaee":application-extension}' is expected.
	at com.sun.faces.config.ConfigureListener.parse(ConfigureListener.java: 1587 )
	at com.sun.faces.config.ConfigureListener.contextInitialized(ConfigureListener.java: 491 )
	at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java: 4236 )
	at org.apache.catalina.core.StandardContext.start(StandardContext.java: 4760 )
	at com.sun.enterprise.web.WebModule.start(WebModule.java: 292 )
	at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java: 833 )
	at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java: 817 )

Из него вроде ясно, что система не понимает тэг <phase-listener> хотя в схеме он есть.
Какие будут идеи?
...
Рейтинг: 0 / 0
JSF использование PhaseListener
    #34495671
KBoris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Изя ШниперсонПокажи исходник
JSP JSF

А исходник какой именно страницы интересует, у меня их несколько. Насколько я понимаю, PhaseListener должен их всех обсуживать. Или я не прав?
...
Рейтинг: 0 / 0
JSF использование PhaseListener
    #34495686
Фотография Изя Шниперсон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KBoris Изя ШниперсонПокажи исходник
JSP JSF

А исходник какой именно страницы интересует, у меня их несколько. Насколько я понимаю, PhaseListener должен их всех обсуживать. Или я не прав?

Ну хотя бы одной.
Без этого не совсем понятно.
...
Рейтинг: 0 / 0
JSF использование PhaseListener
    #34495705
KBoris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Изя Шниперсон KBoris Изя ШниперсонПокажи исходник
JSP JSF

А исходник какой именно страницы интересует, у меня их несколько. Насколько я понимаю, PhaseListener должен их всех обсуживать. Или я не прав?

Ну хотя бы одной.
Без этого не совсем понятно.

Вот самая первая логин
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
<?xml version="1.0" encoding="UTF-8"?>
<jsp:root version="1.2" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html" xmlns:jsp="http://java.sun.com/JSP/Page" xmlns:webuijsf="http://www.sun.com/webui/webuijsf">
    <jsp:directive.page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"/>
    <f:view>
        <webuijsf:page binding="#{Login.page1}" id="page1">
            <webuijsf:html binding="#{Login.html1}" id="html1">
                <webuijsf:head binding="#{Login.head1}" id="head1">
                    <webuijsf:link binding="#{Login.link1}" id="link1" url="/resources/stylesheet.css"/>
                </webuijsf:head>
                <webuijsf:body binding="#{Login.body1}" id="body1" style="-rave-layout: grid">
                    <webuijsf:form binding="#{Login.form1}" id="form1" style="font-size: 14px">
                        <webuijsf:alert binding="#{Login.loginProblemAlert}" id="loginProblemAlert" style="left: 250px; top: 370px; position: absolute"/>
                        <webuijsf:panelLayout binding="#{Login.layoutPanel1}" id="layoutPanel1" style="border: 1px solid black; background-color: rgb(204, 204, 204); height: 150px; left: 250px; top: 200px; position: absolute; width: 440px; -rave-layout: grid">
                            <webuijsf:label binding="#{Login.label2}" id="label2" style="left: 100px; top: 110px; position: absolute" text="Нажмите для входа"/>
                            <webuijsf:label binding="#{Login.label1}" id="label1" style="left: 50px; top: 20px; position: absolute" text="Имя пльзователя"/>
                            <webuijsf:textField binding="#{Login.userName_TF}" id="userName_TF"
                                style="height: 25px; left: 220px; top: 20px; position: absolute; width: 160px" tabIndex="1" text="#{Login.inLogin}"/>
                            <webuijsf:label binding="#{Login.passwordLabel}"  for ="password_TF" id="passwordLabel"
                                style="left: 50px; top: 60px; position: absolute" text="Пароль"/>
                            <webuijsf:passwordField binding="#{Login.password_TF}" columns="21" id="password_TF" password="#{Login.inPass}"
                                style="height: 25px; left: 220px; top: 60px; position: absolute; width: 160px" tabIndex="2"/>
                            <webuijsf:button actionExpression="#{Login.submitLogin_But_action}" binding="#{Login.submitLogin_But}" id="submitLogin_But"
                                style="height: 20px; left: 280px; top: 110px; position: absolute; width: 100px" tabIndex="3" text="Войти"/>
                        </webuijsf:panelLayout>
                    </webuijsf:form>
                </webuijsf:body>
            </webuijsf:html>
        </webuijsf:page>
    </f:view>
</jsp:root>
...
Рейтинг: 0 / 0
JSF использование PhaseListener
    #34495956
wessen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нужно так

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
<?xml version='1.0' encoding='windows-1251'?>
<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_1_2.xsd"
              version="1.2">
    
    
  <application>
    <locale-config>
      < default -locale>en</ default -locale>
      <supported-locale>de</supported-locale>
      <supported-locale>fr</supported-locale>
      <supported-locale>es</supported-locale>
    </locale-config>
    
  </application>
  
   <lifecycle>
        <phase-listener>org.cetco.web.CheckResourceListener</phase-listener>
    </lifecycle>
    
</faces-config>

элемент lifecycle дожен находится внутри элемента faces-config, а не application
...
Рейтинг: 0 / 0
JSF использование PhaseListener
    #34496009
KBoris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wessenнужно так

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
<?xml version='1.0' encoding='windows-1251'?>
<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_1_2.xsd"
              version="1.2">
    
    
  <application>
    <locale-config>
      < default -locale>en</ default -locale>
      <supported-locale>de</supported-locale>
      <supported-locale>fr</supported-locale>
      <supported-locale>es</supported-locale>
    </locale-config>
    
  </application>
  
   <lifecycle>
        <phase-listener>org.cetco.web.CheckResourceListener</phase-listener>
    </lifecycle>
    
</faces-config>

элемент lifecycle дожен находится внутри элемента faces-config, а не application

Вот спасибо! Все работает!
...
Рейтинг: 0 / 0
JSF использование PhaseListener
    #34496364
KBoris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А вот еще вопрос, почему не срабатывает следующий код:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
 package  org.cetco.web;

 import  javax.faces.application.NavigationHandler;
 import  javax.faces.context.FacesContext;
 import  javax.faces.event.PhaseEvent;
 import  javax.faces.event.PhaseId;
 import  javax.faces.event.PhaseListener;
 import  javax.servlet.http.HttpSession;

 public   class  CheckResourceListener  implements  PhaseListener{
    
    /** Creates a new instance of CheckResourceListener */
     public  CheckResourceListener() {
    }
    
     public  PhaseId getPhaseId( ) {
         return  PhaseId.ANY_PHASE;
    }
    
     public   void  beforePhase(PhaseEvent event) {
        System.out.println("^^^^^ BEFORE PHASE");
        FacesContext context = event.getFacesContext( );
        HttpSession session = (HttpSession) context.getExternalContext().getSession(false);
        
         if  (!bCheck(session)) {
            System.out.println("_____VALIDATE SESSION FAIL");
           NavigationHandler nh =
                    context.getApplication( ).getNavigationHandler( );
            nh.handleNavigation(context,  null , "Login");
        }
    }    
    
     public   void  afterPhase(PhaseEvent event) {
        System.out.println("^^^^^ AFTER PHASE");
        
    }
    
     private   boolean  bCheck(HttpSession session) {
         boolean  result =false;
         if (session!= null ){
            result =true;
            System.out.println("TRUE");
        } else {
            System.out.println("FALSE");
            result =false;
        }
         return  result;
    }
  
}

в этому куске не работает этот вызов:
Код: plaintext
1.
2.
            
NavigationHandler nh =context.getApplication( ).getNavigationHandler( );
nh.handleNavigation(context,  null , "Login");

Здесь "Login" имя страницы куда я хочу попасть в случае протухания сессии.
...
Рейтинг: 0 / 0
JSF использование PhaseListener
    #34496377
KBoris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проблему решил, всем спасибо!
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / JSF использование PhaseListener
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]