JSF导航

来源:互联网 发布:美工助理的基本要求 编辑:程序博客网 时间:2024/05/16 14:29

在网站上的网页之间跳转称为导航。要在网站上提供顺利的导航,需要提供能将用户导向网站上的任何部分或网页的路径。此路径称为导航路径。

在Web 应用程序中,用户可以使用以下一种方式从一个网页切换到另一个网页:在网页上输入一些值后单击按钮、单击超链接、在Web 浏览器上输入URL

Web 应用程序开发人员关注的一个主要问题是管理在Web 应用程序的页面之间的导航。

JSF导航模型:

便于定义页面导航,允许我们管理选择加载页面的序列所需的任何其他处理。

基于用户操作,JSF 支持Web 应用程序中的以下导航类型:

  • 静态 –在应用程序开发过程中导航到一个网页的决定是固定的
  • 动态 –从一个网页导航到另一个网页取决于用户输入的结果。

这里写图片描述

隐式导航:

用于实现静态导航。
用户通过单击链接或命令按钮从一个网页导航到另一网页。
链接或命令按钮包含要显示的网页的名称。

基于规则的导航:

用于实现从一个网页到另一个网页的导航。
在faces-config.xml 配置文件的中心位置定义导航规则。
用于改进应用程序管理,便于维护应用程序代码。可用于实现静态和动态导航。

为了实现基于规则的导航,JSF 提供了faces-config.xml 文件中使用的以下导航元素:

<navigation-rule><!--是指定如何从应用程序的一个页面导航到其他页面的根元素。--><from-view-id><!--指定了导航开始的网页的名称。--><navigation-case><!--描述执行案例时必须匹配的条件组合。满足了某个<navigation-case>元素中指定的条件时,应用程序将导航到<navigation-case>中指定的网页。--><from-action><!--包含与相应的<from-action>元素或UI 组件的action属性的输出相比较的值--><from-outcome><!--定义了要执行导航案例必须满足的导航条件。--><to-view-id><!--指定Web 浏览器上将渲染的新网页。-->

请求分发程序机制:

当用户导航到新的网页时,JSF 可以执行页面转发或页面重定向请求。

  • 转发请求

JSF 在内部解析新网页的请求。浏览器不知道此处理,即使显示了新网页,在其地址栏中仍继续显示原始URL。

  • 重定向请求

当用户导航到新网页时,JSF 指示浏览器获取新网页的URL。所以,浏览器获取新的URL,并在其地址栏中显示此URL。
<redirect/>元素:
可以用于在定义导航规则时实现页面重定向请求。
导致客户端浏览器为指定视图发出新的HTTP 请求。
终止当前请求并导致新的请求响应周期开始

<navigation-case><from-action>#{RegisterBean.checkLogic}</from-action><from-outcome>success</from-outcome><to-view-id>/welcome.xhtml</to-view-id><redirect/></navigation-case><!--导致对在<to-view-id>元素中指定的welcome.xhtml 视图形成新的HTTP 请求。-->

您还可以为使用隐式导航机制导航的网页创建新的HTTP 请求:

<h:commandButton value="with Redirect" action="success?faces-redirect=true" /></p><!--true值表示必须将此导航当作包含<redirect>元素的真正的<navigation-case>元素。-->

JSF 高级导航机制

JSF 应用程序通常有复杂的导航需求。
复杂的导航需求包括为多个网页指定单个导航规则,或者基于某个条件导航到新的网页。
为了实现这种导航,JSF 提供了一些高级导航机制,这些机制可通过以下方式实现:
创建全局导航规则;
创建条件导航;

全局导航规则:

使您能定义单个导航规则用来从多个网页导航到同一网页。

可以通过使用以下方式来实现:
使用通配符字符*
从faces-config.xml 文件删除元素

使用通配符:
通配符* 用于指代Web 应用程序中存在的所有网页。此字符写在faces-config.xml 文件的元素中,以实现全局导航规则。

例如:

<navigation-rule><from-view-id> * </from-view-id> <navigation-case><from-outcome>forHome</from-outcome><to-view-id>home.xhtml</to-view-id></navigation-case></navigation-rule><!--包含表示应用程序的所有网页的通配符字符。指定可以从所有其他网页访问该应用程序的主页。也可以用字符/*为应用程序的某个目录中的所有网页定义全局导航规则。-->

删除<from-view-id>元素:
您还可以通过省略<from-view-id>元素来实现全局导航规则:

<navigation-rule><navigation-case><from-outcome>forHome</from-outcome><to-view-id>home.xhtml</to-view-id></navigation-case></navigation-rule><!--指定如果任何网页有与按钮或链接的action属性关联的forHome值,就渲染home.xhtml 页面。-->

条件导航:

您可以在导航案例中使用元素来应用条件导航。
EL 表达式放在元素旁边。
如果EL 表达式的值为true,将处理在第一个导航案例中指定的网页;否则处理会转移到下一个导航案例。

例如:

<navigation-rule><from-view-id>/index.xhtml</from-view-id><navigation-case><from-action>#{bean.SelectAccount}</from-action><if>#{bean.flag}</if><!--指定从受管bean 的SelectAccount()函数返回的值与<if>元素相关联。--><to-view-id>/credit.xhtml</to-view-id></navigation-case><!--如果用户选择“信用卡”选项,flag变量将设置为true。所以,将处理包含<if>元素的第一个导航案例。如果用户选择“借记卡”选项,flag变量将设置为false。所以,不会执行第一个导航案例,处理转移到下一个导航案例。--><navigation-case><from-action>#{bean.SelectAccount}</from-action><to-view-id>/debit.xhtml</to-view-id></navigation-case></navigation-rule>
原创粉丝点击