在使用jsf框架时,肯定会用到faces-config.xml。 而其中就会出现很多的Navigation项。

其实这些Navigation就是一些页面跳转的东西。

以下内容来自http://blog.sina.com.cn/s/blog_600046120100to0e.html

导航(Navigation)
现在对jsf中的导航进行些小结,分为三部分来说,参考与core jsf
1,静态的导航
2,动态的导航
3,高级的导航
主要讨论在你web程序中如何配置导航,即如何让你的程序从一个页面跳转到下一个页面,当然要根据你业务

逻辑的actions和outcomes。

1,静态导航(Static Navigation)
在一个简单的web应用程序中,页面导航一般是静态指定的,在jsf中你只需要给每个按钮一个action属性,然

后再faces-config.xml中配置以下就可以轻松实现页面之间的跳转问题。
例如:
<h:commandButton label="Login"
action="login"/>
但是这样还不行,action必须匹配在faces-config.xml文件中的导航规则的outcome:
<navigation-rule>

<from-view-id>/index.jsp</from-view-id>

<navigation-case>

<from-outcome>login</from-outcome>

<to-view-id>/welcome.jsp</to-view-id>

</navigation-case>

</navigation-rule>
这表明如果按钮在/index.jsp中被点击,页面将跳转到/welcome.jsp.
注意:这里的view-id必须以"/"开始,扩展名为.jsp。例:如果你把from-view-id设置为/index.faces,将不

能工作。

我们看下面这个导航规则:
<navigation-rule>

<navigation-case>

<from-outcome>logout</from-outcome>

<to-view-id>/logout.jsp</to-view-id>

</navigation-case>

</navigation-rule>

可以看到他没有from-view-id,这就意味着:无论你在整个web程序中的任何页面点击,只要outcome为logout

,她都会跳转到/logout.jsp页面。

我们再看下面这段导航规则:

<navigation-rule>

<from-view-id>/index.jsp</from-view-id>

<navigation-case>

<from-outcome>login</from-outcome>

<to-view-id>/welcome.jsp</to-view-id>

</navigation-case>

<navigation-case>

<from-outcome>signup</from-outcome>

<to-view-id>/newuser.jsp</to-view-id>

</navigation-case>

</navigation-rule>

我们可以看到,她有一个相同的from-view-id,意思就是说在/index.jsp中如果你触发的outcome为login,页面

就会跳转到/welecom.jsp,要是为signup的话就跳转到/newuser.jsp页面。事实上我们会经常用到这种规则的

配置。

注意:如果没有导航规则来匹配一个给定的action,那么当前页面将简单的重新显示一下。

2,动态的导航(Dynamic Navigation)
在大多数web程序中,导航都不是静态的。页面的流程不仅仅依靠你点击的那个按钮,而且还有根据你输入的

内容来判断。最常见的就是提交一个处理登陆的页面,可能有两种结果:success or
failure!结果(outcome)

将依赖于一定的计算判断,譬如用户名和密码是否合法。

为了实现动态的导航,提交按钮必须有一个方法来参考,例如:

<h:commandButton label="Login"
action="#{loginController.verifyUser}"/>
loginController是某个类的受管Bean,这个类必须有一个方法名字是verifyUser,返回一个String,供

action属性使用,这个方法可能是这样:
String verifyUser() {
   if (...)
     
return "success";
   else
     
return "failure";
}
注意:如果一个action method返回null,那么将重新显示页面本身。

3,高级的导航

As you can see from the syntax diagram, each navigation-rule and
navigation-case element can

have arbitrary description, display-name, and icon elements.
These elements are intended for use

in builder tools, and we do not discuss them further.

我们来看下面的导航规则:
<navigation-case>

<from-outcome>success</from-outcome>

<to-view-id>/success.jsp</to-view-id>

<redirect/>

</navigation-case>

你会发现在to-view-id后面多了一个redirect元素,Redirecting the page is slower
than forwarding

because another round trip to the browser is involved. However,
the redirection gives the

browser a chance to update its address field.
注释:没有redirect,原来的url(localhost:8080/javaquiz/index.faces)在你从/index.jsp到/success.jsp

后在地址栏中没有改变,反之改变了,变成了localhost:8080/javaquiz/success.faces。

我们接着看下面的导航规则:
<navigation-rule>

<from-view-id>/secure/*</from-view-id>

<navigation-case>

. . .

</navigation-case>

</navigation-rule>
你会发现from-view-id中使用了通配符(wildcards),/secure目录下面的所有页面将应用导航规则。同理:

<from-view-id>/*</from-view-id>or<from-view-id>*</from-view-id>将应用的所有的页面。

我们再看下面的导航规则:

<navigation-rule>
    
<from-view-id>/index/zhuce/denglu.jsp</from-view-id>

<navigation-case>
      
<from-action>#{LoginBean.doLogin}</from-action>

<from-outcome>success</from-outcome>

<to-view-id>/index/zhuce/welcome.jsp</to-view-id>

</navigation-case>
    
<navigation-case>
<from-action>#{LoginBean.doLogin}</from-action>

<from-outcome>failed</from-outcome>

<to-view-id>/index/zhuce/denglu.jsp</to-view-id>

</navigation-case>
</navigation-rule>
你会发现多了一个<from-action>,上边这个好像不太恰当,因为from-action一般在下面这种情况下才能显示

出灵活性:

That flexibility can be useful if you have two separate actions
with the same action string, or

two action method references that return the same action
string.
如果你有连个单独的actions却有相同的action string或两个相同的action
method返回相同的action

string.
举个例子:answerAction和startOverAction都返回again
<navigation-case>

<from-action>#{quiz.answerAction}</from-action>

<from-outcome>again</from-outcome>

<to-view-id>/again.jsp</to-view-id>

</navigation-case>

<navigation-case>

<from-action>#{quiz.startOverAction}</from-action>

<from-outcome>again</from-outcome>

<to-view-id>/index.jsp</to-view-id>

</navigation-case>

例如,假设在我们的测验程序中,startOverAction返回字符串"again"而不是"Start
Over"。answerAction也可能返回相同的字符串。为了区别两种导航情况,可以使用from-action元素。该元素的内容必须与action属性的方法表达式字符串相同。

 <navigation-case>
<from-action>#{quiz.answerAction}</from-action>
<from-outcome>again</from-outcome>
<to-view-id>/again.jsp</to-view-id>
</navigation-case>
<navigation-case>
<from-action>#{quiz.startOverAction}</from-action>
<from-outcome>again</from-outcome>
<to-view-id>/index.jsp</to-view-id>
</navigation-case>

说明

导航处理程序不会调用#{...}分隔符中的方法。在导航处理程序处理之前,该方法已经被调用。导航处理程序只是使用from-action字符串作为一个主键,用于查找匹配导航的情况

JSF -> 导航(Navigation)的更多相关文章

  1. 【译】UI设计基础(UI Design Basics)--导航(Navigation)(六)

    [译]UI设计基础(UI Design Basics)--导航(Navigation)(六)

  2. 微软BI 之SSRS 系列 - 如何实现报表导航 Navigation 和钻取 Drill Down 的效果

    开篇介绍 如何在 SSRS 报表中实现标签导航 Navigation 和向下钻取 Drill Down的效果? 如同下面这个例子一样 - 在页面第一次加载的时候,默认显示是全部地区的销售总和情况,上面 ...

  3. 从PRISM开始学WPF(八)导航Navigation?

    原文:从PRISM开始学WPF(八)导航Navigation? 0x6Navigation Basic Navigation Prism中的Navigation提供了一种类似导航的功能,他可以根据用户 ...

  4. ABP理论学习之导航(Navigation)

    返回总目录 本篇目录 创建菜单 注册导航提供者 展示菜单 每一个web应用在页面之间都有一些要导航的菜单.ABP提供了公用的基础设施来创建菜单并将菜单展示给用户. 创建菜单 一个应用可能由不同的模块组 ...

  5. 【Unity笔记】寻路导航Navigation中的区域Areas与消耗Cost

    Navigation寻路导航界面下,Areas分页下是在给导航区域分类(相当于分层),以及为每个分类设置不同的消费Cost,意义在于,导航算法中会计算出的是累加起来消耗最低的路径(不一定是视觉上最短可 ...

  6. [UE4]手柄导航 Navigation

    Navigation是对应游戏手柄.Left.Right.Up.Down.Next.Previous分别对应游戏手柄上的左.右.上.下.下一个.上一个按键. Left.Right.Up.Down.Ne ...

  7. JSF Action 与ActionListener的区别

    JSF Action 与ActionListener的区别 标签: 杂谈    事件  检验  参数  事件产生  页面跳转  Action  有 无参数,不传入当前控件,有返回值    当铵钮被单击 ...

  8. JSF标签大全详解

    1. JSF入门 藉由以下的几个主题,可以大致了解JSF的轮廓与特性,我们来看看网页设计人员与应用程序设计人员各负责什么. 1.1简介JSF Web应用程序的开发与传统的单机程序开发在本质上存在着太多 ...

  9. ADF_General JSF系列2_创建JSF类型的页面向导

    2015-02-17 Created By BaoXinjian

随机推荐

  1. 时光轴二之RecyclerView版时光轴效果

    由于如今RecyclerView是support-v7包中的新组件,是一个强大的滑动组件.与经典的ListView相比,相同拥有item回收复用的功能,可是直接把viewholder的实现封装起来,用 ...

  2. bootstrap popover 如何在hover状态移动到弹出上不消失

    bootstrap中的popover其实就是对tooltip做了一定升级,拥有了标题和内容 概要 使用的时候依赖第三方插件 依赖tooltip插件 必须初始化 title 和 content 可以在p ...

  3. HTTP——代理协议 HTTP/1.1的CONNECT方法

    我们平时使用HTTP协议无非就是GET.POST这些方法,但是HTTP的内容远不止那些.今天就来说说HTTP代理使用的CONNECT.这个不是在网页开发上用的,如果没兴趣就跳过吧. APACHE只是作 ...

  4. Django——如何处理请求(URL配置和视图)

    URLconfig—— 为了绑定视图函数和URL,我们使用URLconf. URLconf 就像是 Django 所支撑网站的目录. 它的本质是 URL 模式以及要为该 URL 模式调用的视图函数之间 ...

  5. SAP query传输以后须要又一次生成程序

    近期有个需求,须要改动一个Query,在DEV改动好并測试通过后.传输到QAS,可是报表还是没变化,着实郁闷了一下,这是万能的google帮上忙了,原来传到其它系统以后还须要generate prog ...

  6. 控制应用程序重启,外部程序C# 实例

    第一步:新建一个控制台项目,作为关闭当前应用程序的调用程序. using System; using System.Configuration; using System.Diagnostics; n ...

  7. JQuery选择器大全 前端面试送命题:面试题篇 对IOC和DI的通俗理解 c#中关于协变性和逆变性(又叫抗变)帮助理解

    JQuery选择器大全   jQuery 的选择器可谓之强大无比,这里简单地总结一下常用的元素查找方法 $("#myELement")    选择id值等于myElement的元素 ...

  8. 一个由正则表达式引发的血案 vs2017使用rdlc实现批量打印 vs2017使用rdlc [asp.net core 源码分析] 01 - Session SignalR sql for xml path用法 MemCahe C# 操作Excel图形——绘制、读取、隐藏、删除图形 IOC,DIP,DI,IoC容器

    1. 血案由来 近期我在为Lazada卖家中心做一个自助注册的项目,其中的shop name校验规则较为复杂,要求:1. 英文字母大小写2. 数字3. 越南文4. 一些特殊字符,如“&”,“- ...

  9. IOC容器Autofac

    //类ContainerBuilder中的方法: RegisterType<T>()//注册类型T AsImplementedInterfaces()//表示注册的类型,以接口的方式注册 ...

  10. Mysql 常用函数集

    1.分类导航 一共分为5类函数 . 字符型函数 . 数值型函数 . 日期型函数 . 统计型函数 . 其它型函数 2.字符型函数[约48个] ascii(str) bin(n) bit_length(s ...