科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道JSF 中使用自定义 Navigation

JSF 中使用自定义 Navigation

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

过去的一段时间,一直有人拿 JSF 的 Navigation 当靶子,批评 JSF,其实细心的人会发现,在 Java 世界,这样的批评常常是很片面的,几乎所有成熟的应用框架,在除了实现某些默认的功能外,还保留一些扩展的接口,提供了相当的扩展性。

作者:中国IT实验室 来源:中国IT实验室 2007年9月24日

关键字: JSF 编程

  • 评论
  • 分享微博
  • 分享邮件
   过去的一段时间,一直有人拿 JSF 的 Navigation 当靶子,批评 JSF,其实细心的人会发现,在 Java 世界,这样的批评常常是很片面的,几乎所有成熟的应用框架,在除了实现某些默认的功能外,还保留一些扩展的接口,提供了相当的扩展性,比如说 struts, spring 等很多的 web framework 都提供了很多扩展的接口,当然,JSF 也一样。JSF 的 Navigation 中,我们一个 page 都有一个 from-view-id ,它的每个 navigation 出口 to-view-id 都必须定义,所以在不同的 from-view-id 中会有一些重复的 to-view-id,并且每当有一个新的 navigation 路径,我们都必须配置这个路径,才能够在 action 中正确的转向我们这个路径。很多情况下,这样的方式用起来都不是很爽,我们需要有一些简单的方式,我们在 action 事件中,直接 return 一个 page 的 path 就会直接 forward 到这个 page ,在用的时候会方便一些,有没有办法去做到呢?

  答案是肯定的。

  在 JSF 的 Specification 中 7.4 中对 Naviation 已经有很明确的规定了,在 JSF API 中,提供了 NavigationHandler 这样一个抽象类。

  abstract void handleNavigation(FacesContext context, java.lang.String fromAction, java.lang.String outcome)

  我们只要实现这样的抽象方法,就可以实现一个自己定制的 Navigation 实现,当然我们现在用的只是一个 Default 的实现了,如果你希望按照你自己的想法去 Navigation 你的 Application,那么很简单,你只要实现你自己的 handleNavigation 方法就可以了。

  接着,需要在 face-config.xml 的 application 部分加入一些配置:
  <application>
    <navigation-handler>
        your navigation handle implement
    </navigation-handler>
  </application>

  试试看,在你的应用中,是不是已经按照你的 Navigation 在走了呢?

  在 http://www.thearcmind.com/confluence/display/SpribernateSF/Spring+JSF+contribution+Round+2+NavigationHandlerSupport%2C+PrefixSuffixNavigationHandler 这篇文档中,给了我们一个参考的实现,它提供了两种方式来实现它的导航,我把相关的代码附在本文后面,大家可以参考并很容易把它应用到你自己的应用中去了。


http://www.blogjava.net/Files/steady/navigation.rar

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件