JSF 2.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>
任何人都知道我错在哪里?
答
com.sun.faces.context.FacesFileNotFoundException
意味着JSF无法找到视图。您在navigation-rule
中指定的view id
不好(以某种方式)。
一个视图以context root
之后的所有内容(包括/
开头)标识。
但是,您还必须包括与Faces Servlet
在web.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
}
谢谢Bhesh Gurung,我真的尝试了两种方法,动作侦听器以及导航规则方法,它不工作。由于前两种观点的工作方式相同,因此实际上必须有另一种解释。如果我将导航规则更改为指向任何一个之前的上下文,即文件夹地址或文件夹个人,它的工作原理很好,但任何其他上下文都不起作用。 – ltmutiwekuziwa
我刚刚删除了systemuser文件夹,并创建了另一个名为sysuser。现在它工作了!有人可以向我解释发生了什么事。我是JSF的新手。谢谢 – ltmutiwekuziwa
@ltmutiwekuziwa:你可以张贴你的面孔servlet声明和映射和托管bean代码,并且是与WEB-INF相同级别的扩展文件夹吗? (如果你真的使用JSF 2.0,那么你只是在浪费你的时间来做这些事情。) –