JSF 2.0中的隐式导航

在JSF 1.2中,所有页面导航都需要在“ faces-config.xml ”文件中声明,如下所示:

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

在JSF 2中,它将“结果”作为页面名称,例如,导航到“ page1.xhtml”,则必须将“结果”作为“ page1”。 这种机制称为“ 隐式导航 ”,您无需声明繁琐的导航规则,只需将“结果”直接放在action属性中,JSF就会自动找到正确的“ 视图ID ”。

有两种方法可以在JSF 2中实现隐式导航。

1. JSF页面中的结果

您可以将“结果”直接放在JSF页面中。

page1.xhtml –具有命令按钮的JSF页面,可从当前页面移至“ page2.xhtml”。

<h:form>
    <h:commandButton action="page2" value="Move to page2.xhtml" />
</h:form>

单击按钮后,JSF将合并操作值或结果“ page2 ”和“ xhtml ”扩展名,并在当前“ page1.xhtml ”目录中找到视图名称“ page2.xhtml ”。

2.托管豆的结果

此外,您还可以像这样在托管bean中定义“结果”:

PageController.java

@ManagedBean
@SessionScoped
public class PageController implements Serializable {
 
	public String moveToPage2(){
	    return "page2"; //outcome
	}
}

在JSF页面的action属性中,只需使用“ 方法表达式 ”来调用该方法。

page1.xhtml

<h:form>
    <h:commandButton action="#{pageController.moveToPage2}" 
	value="Move to page2.xhtml by managed bean" />
</h:form>

重新导向

默认情况下,JSF 2在导航到另一个页面时执行转发,这导致页面URL始终在后面::。 例如,当您从“ page1.xhtml”移动到“ page2.xhtml”时,浏览器URL地址栏仍将显示相同的“ page1.xhtml” URL。

为了避免这种情况,您可以通过在“结果”字符串的末尾附加“ faces-redirect = true ”来告诉JSF使用重定向。

<h:form>
    <h:commandButton action="page2?faces-redirect=true" value="Move to page2.xhtml" />
</h:form>

注意
对于简单的页面导航,这种新的隐式导航已足够了。 对于复杂的页面导航,您仍然可以在faces-config.xml文件中声明页面流(导航规则)。

下载源代码

下载它– JSF-2-Implicit-Navigation-Example.zip (10KB)

翻译自: https://mkyong.com/jsf2/implicit-navigation-in-jsf-2-0/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值