>我基本上有一个模板,我想在我的几个页面上重复使用。它们都有一个共同的外观和感觉,他们共享一个菜单,允许他们登录并导航到主页。问题出在主页上:
- 当当前页面(不是模板)存在本地
index
(index.xhtml
)时,则将其用作默认值。当我的模板从/tools/page
(/tools/page.xhtml
) 调用时,它将指向/tools/index
(/tools/index.xthml
)。使用相对路径,我可以删除/tools
. - 回退到
/index
(/index.xhtml
)。
例:
<p:menubar>
<p:menuitem icon="fa fa-home" outcome="/index" value="Home"
rendered="#{not outcomeExists('index')}" />
<p:menuitem icon="fa fa-home" outcome="index" value="Home"
rendered="#{outcomeExists('index')}" />
<p:menuitem icon="fa fa-user" value="#{login.name}"/>
</p:menubar>
当然,我想翻译真正的JSF导航规则来测试它是否存在,所以它会自动查找index.xhtml index.jsf等。
我一直
在尝试 - 并得出了这个解决方案,必须在我的 JSF 页面中使用的 CDI Bean 上公开以下方法:
public boolean outcomeExists(String outcome) {
FacesContext ctx = FacesContext.getCurrentInstance();
ConfigurableNavigationHandler configNavHandler = (ConfigurableNavigationHandler)ctx.getApplication().getNavigationHandler();
NavigationCase navCase = configNavHandler.getNavigationCase(ctx,null,outcome);
return navCase != null && navCase.getToViewId(ctx) != null; // the <to-view-id>
}
这改编自 - 以编程方式从人脸配置获取导航案例<到视图 id=">.xml按结果到视图>