2014-01-29 35 views
0

在我的工作中,我們開發了一個JSF 2應用程序。我需要用一個方法創建一個監聽器bean,這個方法必須在每個頁面請求上執行。如何完成這項任務?如何在每個頁面請求中調用bean方法

+0

對你的要求更具體,也許你根本不需要bean –

+2

你可以爲此實現'filter'。 –

+0

@Vasil Lukach,如何實現過濾器? –

回答

0

您的問題的答案可以找到here

這種方法是至關重要的:

public void beforePhase(PhaseEvent event) { 
    if (event.getPhaseId() == PhaseId.RENDER_RESPONSE) { 
     // Do here your job which should run right before the RENDER_RESPONSE. 
    } 
} 

在這裏,你可以在每一個生命週期階段的反應,並調用所需的PhaseId裏面你apropriate功能。我希望它有幫助。

當我看到你使用JSF 2,您也可以使用下面的方法:

使用此您的XHTML頁面內:

<f:event type="preRenderView" listener="#{bean.preRenderView}" /> 

,並調用apropriate方法在bean:

public void preRenderView() { 
    // Do here your job which should run right before the RENDER_RESPONSE. 
} 
+0

這就是問題的答案*「如何實現在生命週期結束時運行的PhaseListener?」*,它不一定與*「如何在每個頁面請求中調用bean方法」*相同的問題。即使那樣,如果這個答案被應用了,你最好已經投票贊成重複,而不是公然地抄襲他人的答案。 – BalusC

+0

@BalusC當然這不是同一個問題,但它可以在bean中使用。正如你在答案中提到的那樣,'preRenderView'方法也適合他的需求 – Metalhead89

0

一種方法是filter。創建類:

public class MonitoringFilter implements Filter { 
    @Override 
    public void doFilter(ServletRequest _request, ServletResponse _response, 
     FilterChain chain) throws IOException, ServletException { 
     HttpServletRequest request = (HttpServletRequest)_request; 
     HttpServletResponse response = (HttpServletResponse)_response; 

     // your code here 
     chain.doFilter(_request, _response); 
    } 
} 

註冊它web.xml中

<filter> 
    <filter-name>monitoringFilter</filter-name> 
    <filter-class>xyz.MonitoringFilter</filter-class> 
    </filter> 

    <filter-mapping> 
    <filter-name>monitoringFilter</filter-name> 
    <url-pattern>/*.jsf</url-pattern> 
    </filter-mapping> 

(以URL模式設置正確的路徑)。

0

我解決了它。起初,我嘗試使用過濾器,但它並不是因爲過濾器在請求開始時被調用,但是當時FacesContext沒有被初始化並且我需要,因爲我必須檢索請求的URL。所以在那之後,我嘗試了相位監聽器,它的工作原理!在beforePhase()方法中,我偵聽PhaseId.RENDER_RESPONSE。謝謝大家的指導。

相關問題