#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