jsf 1.2 получение неправильного идентификатора вида во время фазы восстановленного просмотра

#jsf

#jsf

Вопрос:

В моем проекте я использую следующие фреймворки: sun jsf 1.2, spring 2.5, RichFaces ajax4faces, apache orchestra и Facelets.

Я разработал свою собственную реализацию PhaseListener для отслеживания входящих страниц и обработки предварительных процедур инициализации и событий предварительной отправки через интерфейс Java.

Когда я вызываю страницу по ссылке на HTML-странице и вызывается событие afterPhase , я получаю правильный viewid на этапе restore_view, но когда я вызываю другую страницу с помощью CommandButton (используя navigation.xml конфигурационный файл), когда фаза restore_view вызывает viewid, который остается тем же для страницы вызывающего абонента, но не вызывающего во-первых, я получаю правильный viewid вызывающей страницы до тех пор, пока не будет вызвана фаза invoke_application. Поэтому метод init () вызова страниц не запускается при использовании commnadButton для его вызова.

 here my phaselistener implementation program

package hsbpbnp;

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

public class AppPhaseListener implements PhaseListener {

        PhaseId phaseid           = null ;
        FacesContext facesContext = null ;

//constructor de la clase
    public AppPhaseListener() {
    }

     @Override
     public void beforePhase( PhaseEvent phaseEvent ) {

         phaseid = phaseEvent.getPhaseId();

         if ( phaseid == PhaseId.RENDER_RESPONSE ) {

            facesContext  = phaseEvent.getFacesContext() ;
            String viewId = phaseEvent.getFacesContext().getViewRoot().getViewId() ;
         if( viewId.endsWith( ".xhtml" ) ) {
             String ManagedBeanName = this.getFileName( viewId ) ;
            Object object           = (Object) FacesUtils.getManagedBean( ManagedBeanName ) ;
          if ( object == null ) {
              System.out.println( "no such managed bean "   viewId ) ;
          }else {
              ILifeCycleAware lifeCycleAwareBean = ( ILifeCycleAware ) object ;
              lifeCycleAwareBean.prerender() ;
          }
         }
        }//Fin if RENDER_RESPONSE

    }//Fin del metodo beforePhase

     @Override
     public void afterPhase( PhaseEvent phaseEvent ) {
         phaseid                = phaseEvent.getPhaseId() ;
         SessionBean1 sb        = ( SessionBean1 )FacesUtils.getManagedBean( "SessionBean1" );
         String ManagedBeanName = " " ;
         if ( phaseid == PhaseId.RESTORE_VIEW ) {


            facesContext        = phaseEvent.getFacesContext();
            String viewId       = phaseEvent.getFacesContext().getViewRoot().getViewId();

         if ( viewId.indexOf( "css" ) != -1 ) return;

         if( viewId.endsWith( ".xhtml" ) ) {
            ManagedBeanName = this.getFileName( viewId ) ;
            Object object   = ( Object ) FacesUtils.getManagedBean( ManagedBeanName ) ;
          if ( object == null ) {
              System.out.println( "no such managed bean "   viewId ) ;
          }else {
              ILifeCycleAware lifeCycleAwareBean = ( ILifeCycleAware ) object ;
              lifeCycleAwareBean.init() ;
          }
         }

          String ManagedBean = this.getManagedName( viewId );

        if( sb.getLastPage().equals( ManagedBean ) ) {
            try {
                if(FacesUtils.getRequestParameter("from").equals("menu")){
                    sb.setPostback(false);
                    return;
                }
            } catch (Exception ex){
               //do nothing 
            }

             sb.setPostback( true );

         }else {



           String pop = this.firstFive( ManagedBean );

           if( pop.equals( "Popup" ) ) {

               return;


           }else {

               sb.setLastPage( ManagedBean );
               sb.setPostback( false );
               sb.setOnLoad1 ( " " );
           }

         }

       }//Fin if RESTORE_VIEW

        if( phaseid == PhaseId.INVOKE_APPLICATION ) {
            facesContext  = phaseEvent.getFacesContext() ;
            String viewId = phaseEvent.getFacesContext().getViewRoot().getViewId() ;
         if( viewId.endsWith( ".xhtml" ) ) {
             ManagedBeanName = this.getFileName( viewId ) ;
            Object object           = ( Object ) FacesUtils.getManagedBean( ManagedBeanName ) ;
          if ( object == null ) {
              System.out.println( "no such managed bean "   viewId ) ;
          }else {
              ILifeCycleAware lifeCycleAwareBean = ( ILifeCycleAware ) object ;
              lifeCycleAwareBean.preprocess() ;
          }
         }
        }//Fin if INVOKE_APPLICATION

    }//Fin del metodo afterPhase

     @Override
     public PhaseId getPhaseId() {
         return PhaseId.ANY_PHASE ;
     }//Fin del metodo getPhaseId

//Metodo que se encarga de encontrar el nombre del bean de la
//pagina que esta siendo creada en el ciclo de vida

 public String getManagedName( String path ) {

        String fileName  = null;
        String separator = "/";
        int pos          = path.lastIndexOf( separator );
        int pos2         = path.lastIndexOf( "." );
        if( pos2 >- 1 )
            fileName     = path.substring( pos   1, pos2 );
        else
            fileName     = path.substring( pos   1 );
        return fileName;

  }//Fin del metodo getFileName

     public String getFileName( String path ) {

        String fileName  = null;
        String separator = "/";
        int sep          = path.lastIndexOf( separator );
        int dot          = path.lastIndexOf( "." );
        fileName         = path.substring( sep   1, dot );

    return fileName.substring( 0,1 ).toLowerCase()   fileName.substring( 1 );

  }//Fin del metodo getFileName

   public String firstFive( String managedBean ) {

      String pop = managedBean.substring(0, 5);

      return pop;

  }//fin del metodo firstFive

}//EOF