分享

Apusic OperaMasks学习 14.2. 两种导航方式

 孤独求学者 2011-03-03
 14.2. 两种导航方式
 
14.2.1. 静态导航

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

<navigation-rule> 
     <from-view-id>/login.xhtml</from-view-id> 来源网址
     <navigation-case> 
          <from-outcome>login</from-outcome> 来源构件
          <to-view-id>/welcome.xhtml</to-view-id>目的网址
     </navigation-case>
</navigation-rule> 

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

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

<navigation-rule> 
      <navigation-case> 
         <from-outcome>logout</from-outcome> 
         <to-view-id>/logout.xhtml</to-view-id> 
      </navigation-case> 
</navigation-rule> 

没有指定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表达式引用的方法
 
·     方法的结果被传递到导航处理程序中

导航处理程序跳转到下一个页面

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多