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

Очень нужна информация по использованию 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
28.04.2007, 14:26:25
    #34495606
Изя Шниперсон
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSF использование PhaseListener
Покажи исходник
JSP JSF
...
Рейтинг: 0 / 0
28.04.2007, 14:40:23
    #34495662
KBoris
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSF использование PhaseListener
Небольшой апдейт
В 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
28.04.2007, 14:42:38
    #34495671
KBoris
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSF использование PhaseListener
Изя ШниперсонПокажи исходник
JSP JSF

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

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

Ну хотя бы одной.
Без этого не совсем понятно.
...
Рейтинг: 0 / 0
28.04.2007, 14:48:45
    #34495705
KBoris
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSF использование PhaseListener
Изя Шниперсон 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
28.04.2007, 15:43:31
    #34495956
wessen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
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.
<?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
28.04.2007, 15:57:50
    #34496009
KBoris
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSF использование PhaseListener
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
28.04.2007, 18:19:05
    #34496364
KBoris
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
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.
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
28.04.2007, 18:30:02
    #34496377
KBoris
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSF использование PhaseListener
Проблему решил, всем спасибо!
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / JSF использование PhaseListener / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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