2011-09-27 168 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,那么你只是在浪费你的时间来做这些事情。) –