2012-01-30 63 views
1

我想知道如何在頁面加載後調用backing bean中的方法。 考慮這個scenerio 一旦用戶登錄成功,他的詳細信息將顯示在歡迎頁面中。 說我有login.xhtml和welcome.xhtml 我設法豆的LoginController和DetailsController,兩者都是SessionScope在頁面加載時調用託管bean方法

有一個在DetailsController

稱爲getDetails()方法調用從構造方法不會被推薦的方法,因爲我已經從數據庫中getDetails()

我怎麼把它當用戶被重定向到welcome.xhtml這裏曾經我都給重定向他應該能看到他的細節上閱讀..

謝謝:)

+1

建議如何使正在調用一個getter數據庫嗎? – BalusC 2012-01-30 12:14:35

回答

5

查看事件例如你可以在視圖渲染它調用支持Bean方法preRenderView事件:

<f:metadata> 
     <f:event type="preRenderView" listener="#{myBean.preRender}"/> 
</f:metadata> 

然後通過你的bean的預渲染方法讓你在範圍所需的數據。典型地,該方法將從數據庫讀取數據並設置在適當的範圍內,例如查看範圍。您的價值綁定然後將outputText或inputText組件綁定到您通過preRenderView事件創建或修改的對象。

0

正常的方法是通過某個值表達式調用此方法。
舉例來說,你會有#{myBean.details.price}表達式;這會在你的支持bean上調用getDetails。

通常,如果有多個表達式引用它,您只需確保一次只能從db中獲取詳細信息。這很容易通過私人領域完成。

另一種技術是使用@PostConstruct。這僅適用於使用CDI(或彈簧)的情況。這將在構造函數之後調用一個方法,但在任何其他用法之前。請記住,將調用此方法,而不是在查看頁面時,而是在構建bean時。對於請求範圍的bean來說,這是一回事。對於會話作用域,它不是。

+0

不,我想在我的託管bean中調用方法,然後在我的POJO中設置值。因此,我的EL將像#{myBean.DetailsPOJO.price}。我不使用spring。 – enthusiastic 2012-01-30 09:41:28

+0

@learner爲什麼你不能在getDetailsPOJO()中處理這個問題? – 2012-01-30 12:28:36

+0

Pojos在我的應用程序中只有getter和setters.I不想在其中有任何業務邏輯.. – enthusiastic 2012-01-31 05:23:20

-1

使控制器保存方法返回的字符串

public String Save() throws DaoException 
{ 
    put your operation code here 

    return "/template/template.xhtml&faces-redirect=true"; 
} 
相關問題