2015-12-31 61 views
1

當到達渲染響應階段之前首次加載表單時,我想在JSF視圖範圍的輔助bean中做一些處理。我不能在渲染響應階段執行此過程,因爲我有一個動態包含取決於處理。是否有可用於此的事件偵聽器或階段偵聽器?渲染響應階段之前的JSF事件偵聽器

+0

託管bean的'@ PostConstruct'到底有多少? – BalusC

+0

包含將基於get參數進行動態轉換,該參數在UpdateModelView階段被設置到託管bean中。我不確定在此階段之前是否會調用@PostConstruct。 – futureelite7

+0

只要確保參數已設置並可在'@ PostConstruct'中使用。 – BalusC

回答

0

您可以使用編程階段監聽器我假設您正在使用JSF2。下面的類將在您的應用程序中加載階段偵聽器。

@ManagedBean(eager = true) 
@ApplicationScoped 
public class SomeClass implements Serializable { 

    @PostConstruct 
    private void initialize() { 
     LifecycleFactory factory = (LifecycleFactory) FactoryFinder.getFactory(FactoryFinder.LIFECYCLE_FACTORY); 
     Lifecycle lifecycle = factory.getLifecycle(LifecycleFactory.DEFAULT_LIFECYCLE); 
     lifecycle.addPhaseListener(new PhaseListenerImpl()); 

    } 
} 

下面的類你可以在beforePhase方法中定義你的邏輯。

public class PhaseListenerImpl implements PhaseListener { 

@Override 
public void afterPhase(PhaseEvent pe) { 

    return; 
} 

@Override 
public void beforePhase(PhaseEvent pe) { 

    FacesContext fc = pe.getFacesContext(); 
    String viewId = fc.getViewRoot().getViewId(); 


     try { 
      if(viewId==blah){ 
      //your logic goes here for your view 
      } 

     } catch (Exception e) { 
      e.printStackTrace(); 

     } 

    }  

@Override 
public PhaseId getPhaseId() { 
    return PhaseId.RENDER_RESPONSE; 
} 
+0

OP需要在視圖構建時運行代碼(如ui:包含在視圖構建時運行而不是視圖渲染時運行)。 – BalusC

+0

該代碼允許我在呈現響應階段之前注入偵聽器。謝謝。 – futureelite7

相關問題