JSF导航文件如何设置实例解析

2016-02-19 20:03 5 1 收藏

今天图老师小编给大家介绍下JSF导航文件如何设置实例解析,平时喜欢JSF导航文件如何设置实例解析的朋友赶紧收藏起来吧!记得点赞哦~

【 tulaoshi.com - 编程语言 】

  The JavaServer Faces (JSF)的Navigation框架提供了一些导航规则,可以使您在设计网站应用程序时定义view(大部分是jsp页面)之间的页面导航。这些规则和 其他一些设置一起定义在JSF配置文件中。

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

  该文件的名称一般是 faces-config.XML 。不过完全可以把这个文件名改成其他名字,甚至可以用多个配置文件来存放相关的JSF配置信息,只要在web.xml文件中进行类似下面的设置:
  
  Code:

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)
 context-param 
  
  param-name
  
  javax.faces.CONFIG_FILES
  
  /param-name
  
  param-value
  
  /WEB-INF/faces-config.xml,
  
  /WEB-INF/faces-beans.xml
  
  /param-value
  
  /context-param

  一个简单的例子

  一个导航规则的构成其实很简单,让我们来看第一个例子:
  
  Code:
  
  

 navigation-rule 
  
  from-view-id
  
  /pages/inputname.jsp
  
  /from-view-id
  
  navigation-case
  
    from-outcomesayHello/from-outcome
  
    to-view-id
  
    /pages/greeting.jsp
  
    /to-view-id
  
  /navigation-case
  
  navigation-case
  
   from-outcomesayGoodbye/from-outcome
  
   to-view-id
  
   /pages/goodbye.jsp
  
   /to-view-id
  
  /navigation-case
  
  /navigation-rule

  
  这段代码规定了名为 /pages/inputname.jsp view的两个输出(outcomes), sayHello 和 sayGoodbye ,它们分别同特定的页面相关联。设置一个默认的输出事件(Outcome Case)
  
  基本结构很简单,但是可以在这个基础在进行很多变化。请看下一段代码:
  
  Code:
  
  
 navigation-rule 
  
  from-view-id
  
  /pages/inputname.jsp
  
  /from-view-id
  
  navigation-case
  
   from-outcomesayHello/from-outcome
  
   to-view-id
  
   /pages/greeting.jsp
  
   /to-view-id
  
  /navigation-case
  
  navigation-case
  
    to-view-id
  
    /pages/goodbye.jsp
  
    /to-view-id
  
  /navigation-case
  
  /navigation-rule

  
  该段代码同上面的代码非常类似,不同的是在第二个 navigation-case 中缺少了 from-outcome元素。这意味着所有除sayHello之外的outcome都将进入/pages/goodbye.jsp页面。
  
  利用模式
  
  JSF的navigation模型答应我们利用模式(patterns)。这些模式有一个以星号“*”结尾的字符串组成。参见下例:
  
  Code:
  
  
 navigation-rule 
  
  from-view-id/pages/*/from-view-id
  
  navigation-case
  
  from-outcomemenu/from-outcome
  
  to-view-id/menu/main_main.jsp/to-view-id
  
  /navigation-case
  
  navigation-case
  
    from-outcomeinfo/from-outcome
  
    to-view-id/menu/info.Html/to-view-id
  
  
  /navigation-case
  
  /navigation-rule

  
  这段导航规则适用于类似 /pages/exit.jsp 之类的任何以 /pages/ 为起始URL的页面。注重星号一定要放在最后。例如一个类似 / pages/*.jsp 的模式是无效的。
  
  Resolving More Than One Matching Rule
  
  现在我们来细察一下JSF导航模型中该如何处理多个规则。具体见下面例子:
  
  Code:
  
  
 navigation-rule 
  
  from-view-id/pages/*/from-view-id
  
  navigation-case
  
   from-outcomeinfo/from-outcome
  
   to-view-id/menu/generalHelp.html/to-view-id
  
  /navigation-case
  
  /navigation-rule
  
  navigation-rule
  
  from-view-id/pages/login.jsp/from-view-id
  
  navigation-case
  
    from-outcomeinfo/from-outcome
  
    to-view-id/menu/loginHelp.html/to-view-id
  
  /navigation-case
  
  /navigation-rule
该例中,第二个导航规则,而不是前一个,将对 /pages/login.jsp 生效,尽管该页面也匹配第一个规则中的模式 /pages/* 。这说明对于一个特定的 from-outcome ,匹配更为具体的规则将生效。
  
  "Global" Outcomes
  
  

  
  假设现在我们需要一个globalHelp输出(outcome) 可以使得从任何页面转到帮助页面 /help/index.html 。要实现该效果,可以利用下面两个声明中的任何一个:
  
  Code:
  
  
navigation-rule 
  
  from-view-id*/from-view-id
  
  navigation-case
  
  from-outcomeglobalhelp/from-outcome
  
  to-view-id
  
  /menu/generalHelp.html
  
  /to-view-id
  
  /navigation-case
  
  /navigation-rule
  
  navigation-rule
  
  navigation-case
  
  from-outcomeglobalhelp/from-outcome
  
  to-view-id
  
  /menu/generalHelp.html
  
  /to-view-id
  
  /navigation-case
  
  /navigation-rule

  
  第一段代码在标签 from-view-id 中使用了星号,而第二断代码甚至根本没有用from-view-id标签。两者都可以达到相同的效果。不过需注重的是,一个空的from-view-id元素是没有任何效果的,例如:
  
  Code:
  
  
navigation-rule 
  
  from-view-id*/from-view-id
  
  navigation-case
  
    from-outcome
  
    globalhelp
  
    /from-outcome
  
    to-view-id
  
    /menu/generalHelp.html
  
    /to-view-id
  
  /navigation-case
  
  /navigation-rule
  
  navigation-rule
  
  from-view-id*/from-view-id
  
  navigation-case
  
    from-outcome
  
    globalhelp
  
    /from-outcome
  
    to-view-id
  
    /pages/goaway.html
  
    /to-view-id
  
  /navigation-case
  
  /navigation-rule

  
  规则的冲突
  
  

  
  这是个有趣的问题。假如有两个相同的 from-view-id ,其包含from-outcome也相同,只是指向不同的页面。来看看下一个例子:
  
  Code:
  
  
  navigation-rule 
  
  
  from-view-id*/from-view-id
  
  navigation-case
  
    from-outcome
  
    globalhelp
  
    /from-outcome
  
    to-view-id
  
    /menu/generalHelp.html
  
    /to-view-id
  
  /navigation-case
  
  /navigation-rule
  
  navigation-rule
  
  from-view-id*/from-view-id
  
  navigation-case
  
    from-outcome
  
    globalhelp
  
    /from-outcome
  
    to-view-id
  
    /pages/goaway.html
  
    /to-view-id
  
  /navigation-case
  
  /navigation-rule

  
  这种情况下,最后一个规则将生效。同时还需注重本文前面提到可以将JSF配置信息置于多个文件中的情况。从而产生冲突的规则可能位于不同的配置文件,此时应根据 web.xml 文件中的JSF配置文件列表,在含冲突规则的配置文件中最后加载的文件中的相关规则将会生效。将一个导航规则分开为几部分,这是同一种效果的不同实现方式。试比较下面两段代码:
  
  Code:
  
  
 navigation-rule 
  
  from-view-id
  
  /pages/inputname.jsp
  
  /from-view-id
  
  navigation-case
  
  from-outcomesayHello/from-outcome
  
  to-view-id
  
  /pages/greeting.jsp
  
  /to-view-id
  
  /navigation-case
  
  navigation-case
  
  from-outcome
  
  sayGoodbye
  
  /from-outcome
  
  to-view-id
  
  /pages/goodbye.jsp
  
  /to-view-id
  
  /navigation-case
  
  /navigation-rule

  
  Code:
  
  
 navigation-rule 
  
   from-view-id
  
   /pages/inputname.jsp
  
   /from-view-id
  
   navigation-case
  
  from-outcome
  
  sayHello
  
  /from-outcome
  
  to-view-id
  
  /pages/greeting.jsp
  
  /to-view-id
  
   /navigation-case
  
  navigation-rule
  
  ...
  
  ...
  
  navigation-rule
  
  from-view-id
  
  /pages/inputname.jsp
  
  /from-view-id
  
  navigation-case
  
  from-outcome
  
  sayGoodbye
  
  /from-outcome
  
  to-view-id
  
  /pages/goodbye.jsp
  
  /to-view-id
  
  /navigation-case

  
  运行时两者效果相同。不过,第二段代码显示规则声明可以任意分开后放在配置文件的不同位置,甚至是不同的配置文件中。你可以根据自己的需要选择不同的方式。在action中使用导航规则。现在,该看看如何将前面所学内容应用于程序中了。下面便是一个JSP页面可能包含的代码:
  
  Code:
  
  
?xml:namespace prefix = h />h:commandButton 
  
  id="submit"
  
  action="sayHello"
  
  value="Submit" /

  
  action属性值将被用作一个输出(outcome)。这里是另一种方式:
  
  Code:
  
  
h:commandButton id="submit" 
  
  action="#{GetNameBean.helloAction}"
  
  value="Submit" /

  
  
  这意味着将调用GetNameBean的helloAction方法,该方法运行的结果将成为一个outcome。注重helloAction必须是一个返回值为字符串的public方法。
  
  上面两种不同action属性值的写法区别在考虑到配置文件中的一个标签时将比较重要,这个标签便是 from-action 标签,我们前面还未提及。请参考下面代码:
  
  Code:
  
  
 navigation-rule 
  
  from-view-id
  
  /pages/inputname.jsp
  
  /from-view-id
  
  navigation-case
  
  from-outcomesayHello/from-outcome
  
  to-view-id
  
  /pages/anotherhello.jsp
  
  /to-view-id
  
  /navigation-case
  
  navigation-case
  
  from-action
  
  #{GetNameBean.helloAction}
  
  /from-action
  
  from-outcomesayHello/from-outcome
  
  to-view-id
  
  /pages/hello.jsp
  
  /to-view-id
  
  /navigation-case
  
  /navigation-rule

  
  在这段代码中,两个navigation cases均含有相同的 from-view-id 以及 from-outcome 元素,不过第二个navigation case包含一个from-action元素。假如 sayHello 这个outcome是通过 GetNameBean.helloAction 产生的话,第二个navigation case将生效,不过其原因仅仅是除 from-outcome 外两者具有相同的优先级。
  
  Review
  
  为了检查您对本文的理解情况。请看下面例子,在 /pages/inputname.jsp 这页面中对commandButton有一下声明:
  
  Code:
  
  
h:commandButton id="submit" 
  
  action="#{GetNameBean.helloAction}"
  
  value="Submit" /

  
  而JSF配置文件则包含了一下内容:
  
  Code:
  
  
 navigation-rule 
  
  from-view-id
  
  /pages/inputname.jsp
  
  /from-view-id
  
  navigation-case
  
    from-outcomesayHello/from-outcome
  
    to-view-id/a.jsp/to-view-id
  
  /navigation-case
  
  /navigation-rule
  
  navigation-rule
  
  from-view-id/pages/*/from-view-id
  
  navigation-case
  
  from-action
  
  #{GetNameBean.helloAction}
  
  /from-action
  
  from-outcomesayHello/from-outcome
  
  to-view-id/b.jsp/to-view-id
  
  /navigation-case
  
  /navigation-rule
假如上面页面中的提交按钮被按下,到底跳到/a.jsp还是/b.jsp的哪个页面,假如在GetNameBean.helloAction返回值为sayHello的情况下又如何呢? 留给大家作为思考吧!

来源:https://www.tulaoshi.com/n/20160219/1622639.html

延伸阅读
WinRAR如何设置关联文件   启动WinRAR,再选择选项→设置,打开设置对话框,单击综合标签 。再选择相应的关联文件即可。当然,面对这么优秀的压缩软件,点击全部选中按钮也不错。
凯立德导航密码怎么设置 凯立德导航设置密码方法。相信很多小伙伴在登录凯立德导航APP的时候使用手机号快捷登录登录。那么凯立德的账号登录需要密码在哪里设置呢?接下来图老师小编就教大家凯立德导航设置密码方法。 1)打开凯立德导航进入首页后点击右下角,接着点击自己的。(如下图) 2)接着在个人中心点击,编辑你要...
标签: Web开发
前言: 最近在给一个电子商务网重构的时候,用ul li写了个导航,感觉挺有实用价值的,所以写出来给朋友瞧瞧。 实例效果图: 整体观察思考: 左下角是圆角,右上角也是圆角,中间可以平铺背景,这图的结构也可以看成左中右的结构,标题距离宽度差不多,我考虑用 ul li来写。 ul为整体平铺背景。 li设置固定...
Google不久前刚刚更新了他们的Google+应用,采用了新的导航方式并抛弃了navigationdrawer。一时之间,又引发了一系列关于NavigationDrawer利弊的讨论。 Navigationdrawer又被称为OffCanvas、hamburgernavigation、sidenavigation、slidemenu等等,虽然叫法不一样,但大致都是同一种形式的导航。 NavigationDrawer的前世今生 据考究,Navi...
对于大部分网站,导航并不算是个挑战。一条主导航加条二级导航支撑,通常就足够了。典型的做法是,二级导航显示出父、兄及当前子菜单。常显的主导航条显示最顶层的菜单,允许用户在菜单间切换。 然而,有一类网站让这种传统的导航样式承担有些吃力。这就是我要提的大型网站。 定义大型网站 一个大型网站由结合了综合服务和产品的典型大型组...

经验教程

734

收藏

58
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部