我可以在 JSF 导航规则中使用通配符 * 吗?

Posted

技术标签:

【中文标题】我可以在 JSF 导航规则中使用通配符 * 吗?【英文标题】:Can I use wildcard character * in JSF navigation rule? 【发布时间】:2016-05-24 04:39:09 【问题描述】:

在 JSF 页面导航中有什么方法可以创建百搭规则吗?我的模板标题中有一个注销链接(几乎适用于所有页面)。我只想给出一条规则,将安全文件夹中的所有页面导航到根目录中的索引页面。

<navigation-rule>
    <from-view-id>/secure/*.xhtml</from-view-id>
    <navigation-case>
        <from-outcome>index</from-outcome>
        <to-view-id>/index.xhtml</to-view-id>
    </navigation-case>
</navigation-rule>

我试过了,但是解析器说它没有找到从/secure/pagex.xhtml/index.xhtml 的规则。这是真的?我必须为我的所有页面一个一个地给出一个规则?

【问题讨论】:

【参考方案1】:

通配符只能作为后缀(作为最后一个字符)。

<navigation-rule>
    <from-view-id>/secure/*</from-view-id>
    <navigation-case>
        <from-outcome>index</from-outcome>
        <to-view-id>/index.xhtml</to-view-id>
    </navigation-case>
</navigation-rule>

&lt;from-view-id&gt; 是可选的。您也可以直接删除它。

<navigation-rule>
    <navigation-case>
        <from-outcome>index</from-outcome>
        <to-view-id>/index.xhtml</to-view-id>
    </navigation-case>
</navigation-rule>

或者,更好的是,使用隐式导航,然后您可以完全删除 &lt;navigation-rule&gt;

例如获取

<h:button ... outcome="/index" />
<h:link ... outcome="/index" />

或发布

public String logout() 
    // ...

    return "/index?faces-redirect=true";

JSF 会自动担心扩展和映射。

另见:

JSF implicit vs. explicit navigation

【讨论】:

以上是关于我可以在 JSF 导航规则中使用通配符 * 吗?的主要内容,如果未能解决你的问题,请参考以下文章

JSF:向操作方法添加参数后导航规则停止工作

JSF 页面导航:意外的 RuntimeException

如何同时使用导航规则和 f:ajax

jsf中的后退命令按钮

CommandLink 导航在 JSF 中不起作用

JSF 中“返回”导航链接的最佳实践