jsf 1.2在恢复的视图阶段获取错误的viewID

时间:2011-10-25 00:06:34

标签: jsf

在我的项目中,我使用以下框架:sun jsf 1.2,spring 2.5,RichFaces ajax4faces,apache orchestra和Facelets。

我开发了自己的PhaseListener实现来捕获传入的页面并通过Java接口处理init preproces和prerender事件。

当我从HTML页面上的链接调用页面并调用afterPhase事件时,我在restore_view阶段获得了正确的viewid,但是当我在restore_view中使用commandButton(使用navigation.xml配置文件)调用另一个页面时阶段调用viewid仍然是调用者页面相同但不调用调用者,我得到调用页面的正确viewid,直到invoke_application阶段被调用。 因此,当使用commnadButton调用它时,调用页面的init()方法不会运行。

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

0 个答案:

没有答案