JSF 1.2 получает неправильный viewID во время восстановленной фазы просмотра - PullRequest
2 голосов
/ 25 октября 2011

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

Я разработал собственную реализацию PhaseListener для перехвата входящих страниц и обработки предварительных обработок init и событий prerender через интерфейс 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...