2012-05-23 79 views
3

我有一個primefaces數據表,其中顯示記錄數。導航到其他頁面選擇數據表中的行選擇

I want navigate to another page on the rowSelect event (to edit the selected entity for example)

最接近的樣品/演示中,我能找到的是用p:AJAX標籤的rowSelect事件綁定到監聽器方法 http://www.primefaces.org/showcase-labs/ui/datatableRowSelectionInstant.jsf

我也得到了同樣的http://forum.primefaces.org/viewtopic.php?f=3&t=14664

一文中,我試着以同樣的方式執行。但它也沒有奏效。

我想以這種方式引導我如果我錯過了任何東西。

​​

而且支持bean是:

@ManagedBean 
@ViewScoped 
public class AddPatientBB implements Serializable 
{ 
    private Patient pat; 

    public Patient getPat() 
    { 
    System.out.println("tried to get pat"); 
    return pat; 
    } 

    public void setPat(Patient pat) 
    { 
    this.pat = pat; 
    System.out.println("tried to set pat"); 
    } 

    public void onRowSelect() 
    { 
    System.out.println("inside onRow select Method"); 
    ConfigurableNavigationHandler configurableNavigationHandler = (ConfigurableNavigationHandler) FacesContext.getCurrentInstance().getApplication().getNavigationHandler(); 

    System.out.println("navigation objt created"); 

    configurableNavigationHandler.performNavigation("Page?faces-redirect=true"); 

    // Page is my navigation page where I wish to navigate named as 
    // "Page.xhtml" 

    System.out.println("Navigation executed"); 

    } 

} 

所以,我怎麼能瀏覽到rowselect事件另一頁?以及如何在導航表格後顯示其值。

我能進去onRowSelect()方法,實際的問題是,他是不是能夠得到或瞭解路徑:

configurableNavigationHandler.performNavigation(「?第面臨重定向=真正的」);

,所以他無法這一行後打印的任何記錄。 這是爲什麼呢?是因爲我在使用Liferay嗎?

Pla指導我。

+0

什麼與您的代碼會發生什麼?是執行onRowSelect()方法嗎?是在豆中設置的選定患者? – Damian

+0

不,連病人都沒有在bean中選中,也沒有onrowselect方法執行 – Java

+0

我是否做錯了? – Java

回答

8

嗯,我認爲onRowSelect永遠不會執行,因爲你定義了錯誤。

試試這個:

public void onRowSelect(SelectEvent event) 
{ 


    FacesContext.getCurrentInstance().getExternalContext().redirect("page.xhtml?id=" +pat.getId()); 


} 
+0

按照JSF規範,你必須調用FacesContext.getCurrentInstance( ).responseComplete();重定向後。 –

+0

我不明白你爲什麼用錯誤的信息編輯我的答案。從de jsf文檔中可以清楚地看出:將請求重定向到指定的URL,並導致在當前請求的FacesContext實例上調用responseComplete()方法。 – Tankhenk

+0

請查看https://www.jcp.org/en/jsr/detail?id=344最終發佈規範,並查看第2-4頁的第2.1.3章,在第2-4頁的開始部分清楚地指出:「這是必要的告訴JSF實現已經創建了響應 ,這樣就可以跳過請求處理生命週期的渲染響應階段,通過在當前請求的FacesContext實例上調用responseComplete()方法,實現 ,從事件處理程序或應用程序操作返回到 。「 –

-3

如果妳使用FacesServlet的那麼use.jsf而不是.xhtml

public void onRowSelect(SelectEvent event) 
{ 
    FacesContext.getCurrentInstance().getExternalContext().redirect("page.jsf?id="+pat.getId()); 
}