导航规则导致JSF1064:无法找到或服务资源

导航规则导致JSF1064:无法找到或服务资源,jsf,navigation,faces-config,Jsf,Navigation,Faces Config,我有以下xhtml页面,它被包装在我的项目中其他页面的主要部分中: <ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://xmlns.jcp.org/jsf/html" xmlns:ui="http://java.sun.com/jsf/facelet

我有以下xhtml页面,它被包装在我的项目中其他页面的主要部分中:

<ui:composition  xmlns="http://www.w3.org/1999/xhtml"
             xmlns:f="http://java.sun.com/jsf/core"
             xmlns:h="http://xmlns.jcp.org/jsf/html"
             xmlns:ui="http://java.sun.com/jsf/facelets"
             xmlns:p="http://primefaces.org/ui">
<h:head>
    <title></title>
</h:head>
<h:form>  
    <p:menubar>
        <p:menuitem value="Home" url="/protected/personal/HomeCalendar.xhtml" icon="ui-icon-home"/>
        <p:menuitem value="#{topbarBean.username}" url="#" style="text-decoration: underline" />
        <f:facet name="options">
            <p:inputText style="margin-right:20px" placeholder="Search"  value="#{searchBean.searched}"/>
            <p:commandButton action="#{searchBean.search()}" type="submit" icon="ui-icon-search" />
        </f:facet>
       </p:menubar>
</h:form>
</ui:composition>

我不明白这个问题是与导航规则还是下一个xhtml页面有关

如果JSF找不到匹配的导航规则,就会发生这种情况。然后它将切换到隐式导航。即,结果将用作相对于当前上下文的实际视图ID

显然,当前视图ID位于
/protected/personal
中的某个位置。
searchingResults
的结果与任何导航规则都不匹配,将触发到
/protected/personal/searchingResults.xhtml
的隐式导航

您有两种选择:

  • 修复当前视图ID。
    /Components/TopBar.xhtml
    显然是错误的。您可以按如下方式找到正确的选项:

    System.out.println(FacesContext.getCurrentInstance().getViewRoot().getViewId());
    
    它通常与浏览器地址栏中的上下文相对URI相匹配,只要不使用POST进行页到页导航。在
    中使用此值

  • 完全摆脱导航案例,依靠隐式导航。从
    faces config.xml
    中删除
    ,并更改结果值和操作方法,如下所示:

    private final String resultsOutcome = "/protected/SearchResults.xhtml";
    
    public String search() {
        return resultsOutcome;
    }
    
    NavigationHandler
    方法也相当笨拙。即使是使用导航案例,也只需直接返回结果,而不是摆弄
    NavigationHandler

  • 另见:

    好的,我注意到有点不对劲,在我的导航规则中,我根据registrationBean从一个索引到另一个索引,没有:根据registrationBean从索引到错误,没有:错误,根据loginBean从索引到HomeCalendar,没有:成功,从索引到错误,根据loginBean,没有:错误,以及我以前发布过的如果登录成功,它不会加载HomeCalendar,但在浏览器的URI中仍然有索引路径。我对前面问题的疑问是:哪个是ui:组件的viewId?因为它包含在/protected/*下的所有页面中,但我不知道是否必须为特定组件或包装组件的所有页面设置URI。(我的项目中的组件是TopBar.xhtml文件)我非常感谢您的支持!!你混合了几个概念和术语。导航案例与组件无关(也与包含/组合无关)。也许当前页面是通过帖子导航打开的(这真的是一个糟糕的做法)。然后打印答案中所示的视图ID以获得正确的视图ID。我建议暂停一下,仔细阅读答案底部的“请参阅”链接以及链接答案中的“请参阅”链接。最后但并非最不重要的一点是,我还建议在使用新的/现有的JSF应用程序之前,阅读一本理智的JSF书籍并进行更多的练习;fc.getApplication().getNavigationHandler().handleNavigation(fc,null,MyCalendarOutput);仅在过滤器中,我为这些过滤器制定了导航规则,而且我一直尽可能使用隐式导航。谢谢你的帮助。
    -Index,xhtml
    -Web Pages { components , protected}
    -components{TopBar.xhtml}
    -protected {event,persona,user,SearchResults.xhtml}
    -event{eventCreate,eventPage,eventEdit}
    -personal{HomeCalendar,ManageSettings,ManageInvitations}
    
    System.out.println(FacesContext.getCurrentInstance().getViewRoot().getViewId());
    
    private final String resultsOutcome = "/protected/SearchResults.xhtml";
    
    public String search() {
        return resultsOutcome;
    }