日期:2014-05-16  浏览次数:20320 次

JSF RI中实现Seam版的导航处理

??????? 用过seam的人都知道seam中支持action如果返回形如‘/xxx.xhtml’的导航字符串的时候会直接转到这个页面,而不管faces-config.xml中是否有这样的一个导航规则,这个对JSF的小改动对那些页面是动态选择的情况非常适用,比如你的页面地址是从数据库中获取的。
其实在JSF中实现这个小特性是非常简单的,只需要扩展一下JSF提供的默认导航处理器就可以了。

java 代码
  1. /** ?
  2. ?*?扩展JSF默认导航处理器,支持形式为'/index.faces'的outcome,直接定向到这个页面 ?
  3. ?*? ?
  4. ?*?@author?jones ?
  5. ?*? ?
  6. ?*/??
  7. public?class?MyNavigationHandler?extends?NavigationHandlerImpl?{ ??
  8. ??
  9. ????@Override??
  10. ????public?void?handleNavigation(FacesContext?context,?String?fromAction, ??
  11. ????????????String?outcome)?{ ??
  12. ???????? ??
  13. ????????if(outcome?!=?null?&&?outcome.startsWith("/")){ ??
  14. ???????????? ??
  15. ????????????Application?application?=?context.getApplication(); ??
  16. ????????????ViewHandler?viewHandler?=?application.getViewHandler(); ??
  17. ????????????UIViewRoot?newRoot?=?viewHandler.createView(context,outcome); ??
  18. ????????????context.setViewRoot(newRoot); ??
  19. ???????????? ??
  20. ????????}else{ ??
  21. ????????????super.handleNavigation(context,?fromAction,?outcome); ??
  22. ????????} ??
  23. ???????? ??
  24. ????} ??
  25. ??
  26. }??
1 楼 bigshell 2008-05-18  
这个不错,很有价值的,想来当初也碰上需要动态导航的情况,后来只好用别的办法绕过去的~~~
2 楼 songxh2 2008-10-05  
推荐一个非常棒的jsf1.2的实例:Donuts1.3软件myfaces1.2+tomahawk1.1.7),
下载页面:
http://www.xerllent.cn/sites/home/TypeView.jsp?TypeID=67
软件安装需要sqlserver2000支持。)