2011-09-27 220 views
0

我正在使用Netbeans 7.0,GlassFish 3.1,JSF 2.0 我試圖從一個視圖導航到另一個步驟的用戶註冊過程(有三個步驟)。每一步對應一個視圖,這些視圖位於不同的文件夾中,但都具有相同的名稱,即register.xhtml。我已經嘗試隱式導航,我指定託管bean事件偵聽器中的視圖的絕對路徑,並使用faces-config.xml導航案例。JSF 2.0導航不工作

問題是,我可以從第一步/視圖導航到下一步/視圖沒有問題。導航到第三視圖然而導致com.sun.faces.context.FacesFileNotFoundException

的文件結構是像

/extensions/assm/registration/individual/register.xhtml 
/extensions/assm/registration/address/register.xhtml 
/extensions/assm/registration/systemuser/register.xhtml 

用於從地址提取導航faces-config.xml中的至systemuser

<navigation-rule> 
<from-view-id></from-view-id> 
<navigation-case> 
<from-outcome>gotosystemuser</from-outcome> 
<to-view-id>/extensions/aasm/registration/systemuser/register.xhtml</to-view-id> 
</navigation-case> 
</navigation-rule> 

任何人都知道我錯在哪裏?

回答

2

com.sun.faces.context.FacesFileNotFoundException

意味着JSF無法找到視圖。您在navigation-rule中指定的view id不好(以某種方式)。

一個視圖以context root之後的所有內容(包括/開頭)標識。

但是,您還必須包括與Faces Servletweb.xml中映射的URL pattern。 例如如果在你的web.xml中,如果你有

<servlet-name>Faces Servlet</servlet-name> 
<url-pattern>/jsf/*</url-pattern> 

那麼你還必須包括那個作爲View ID。所以,用視圖id會

/jsf/folder1/folder2/page.xhtml

但隨着JSF 2.0,你不需要做所有的導航規則在faces-config文件。 在JSF 2.0中導航到另一個頁面,您只需從action方法返回視圖標識。

@ManagedBean 
@ViewScoped 
public class MyBean { 

    public String axnMethod() { 
     return "view-id"; //this will result in navigation to view represented by view-id 
    } 
+0

謝謝Bhesh Gurung,我真的嘗試了兩種方法,動作偵聽器以及導航規則方法,它不工作。由於前兩種觀點的工作方式相同,因此實際上必須有另一種解釋。如果我將導航規則更改爲指向任何一個之前的上下文,即文件夾地址或文件夾個人,它的工作原理很好,但任何其他上下文都不起作用。 – ltmutiwekuziwa

+0

我剛剛刪除了systemuser文件夾,並創建了另一個名爲sysuser。現在它工作了!有人可以向我解釋發生了什麼事。我是JSF的新手。謝謝 – ltmutiwekuziwa

+0

@ltmutiwekuziwa:你可以張貼你的面孔servlet聲明和映射和託管bean代碼,並且是與WEB-INF相同級別的擴展文件夾嗎? (如果你真的使用JSF 2.0,那麼你只是在浪費你的時間來做這些事情。) –