萨顶顶话筒拿反:Apusic OperaMasks学习 14.2. 两种导航方式

来源:百度文库 编辑:九乡新闻网 时间:2024/05/08 05:40:51
 14.2. 两种导航方式 14.2.1. 静态导航

在简单web应用程序中,网页导航是静态的。也就是说,一个导航动作总是跳转到固定的目的页面。要实现静态导航,在编写页面时只需要在动作构件(例如命令按钮)的action属性中指定导航的来源标识字符串,。并且,如上文所述,我们需要在导航规则里配置一个outcome,告诉JSF引擎导航的目的地。导航规则在配置文件WEB-INF/faces-config.xml中的配置为:

 
     /login.xhtml 来源网址
      
          login 来源构件
          /welcome.xhtml目的网址
     
 

那么,用户进入login.xhtml后,点击命令按钮,导航管理器将根据导航规则,执行页面跳转到welcome.xhtml中去。

如果有好多页面点击命令按钮后要跳转到同一页面,可以仔细挑选动作字符串,将多个导航规则组合在一起。例如,可以配置整个应用程序页面中action输出为logout的按钮,点击后,跳转到logout.xhtml页面。

 
       
         logout 
         /logout.xhtml 
       
 

没有指定from-view-id元素,上面的导航规则适合于所有页面

1.1.2    14.2.2. 动态导航

静态导航中,action对应的是固定字符串。但在多数web应用程序中,导航不是静态的,而是需要根据一定逻辑动态决定采用哪种导航规则。为此,OperaMasks中提供了动态导航特性。动态导航与静态导航最大的区别在于action是通过EL表达式指定的方法。页面的跳转所采用的导航规则依赖于用户对action方法的具体实现。

动态导航的action对应的是一个方法引用(method reference)。例如:

< h:commandButton label="test_dynamic" action="#{backBean.login}" />

要实现动态导航,action属性中的方法要有返回值。导航控制器根据返回值的结果进行导航规则的匹配,进而实现页面的跳转。方法的返回值可以是任何类型,使用枚举类型是一个有用的选择,因为编译器能够在动作名称中捕获方法的返回值的类型。例如:在常见的用户登录界面中要核对用户是否合法,根据核对的结果跳转到不同的页面,就要用动态导航来处理。其中action的方法引用的写法可以如下:

public String login(){
   if(username.equals(name)){ 
       return "sucess"; 
    }
  else{ 
    return "failure";
    }
}

导航规则配置文件faces-config.xml的写法和上面的静态导航配置一样(这里的配置可以被静态导航和动态导航同时使用)。

动态导航的处理过程是: ·     执行EL表达式引用的方法 ·     方法的结果被传递到导航处理程序中
导航处理程序跳转到下一个页面