萨马兰奇 邓亚萍:OperaMasks学习 14.3. 高级导航

来源:百度文库 编辑:九乡新闻网 时间:2024/04/28 03:00:36

14.3. 高级导航

 14.3.1. 零配置导航

OperaMasks 2.0及其后续版本对动态导航做了一定的改进,使用改进后的方法可以省去faces-config.xml中对导航规则的配置,实现零配置导航。同样对于判断用户合法与否的实现,将方法实现中的返回结果进行改变即可。具体实现如下:

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

假设,命令按钮所在的页面login.xhtml的路径是:http://localhost:6888/ear/com/login.xhtml,其中ear为应用的上下文根,com是一个目录。那么:

·     根据上述代码的返回结果,导航控制器在login.xhtml页面所在的目录下去查找相应的页面,条件判断结果为真时,跳转到http://localhost:6888/ear/com/mainmenu.xhtml页面。

·     在处理返回结果时,如果要跳转的页面前面含有"/",即写成return "/mainmenu.xhtml",那么导航控制器将去上下文根中去找相应的页面。导航控制器要跳转到http://localhost:6888/ear/mainmenu.xhtml页面。

·     除了用页面资源路径外,还可以用页面的viewId来指定导航目的页面,格式是“view:viewId”。例如上面例子也可以返回结果“view:mainmenu”,页面的viewId事实上是页面名称,可以省略文件的扩展名

·     除了能转到同一目录下的其它页面外,当然也可以转到其它目录的页面,这时可以使用..和/进行页面定位  14.3.2. 重定向

在导航的处理方式上,OperaMasks也提供了两种选择,转发(forward)方式重定向(redirect)方式。默认情况下,使用转发方式,服务器端直接将请求转发到新的页面。由于转发行为完全发生在服务器端,从当前页面跳转到另一个页面后,浏览器地址栏保留的是请求的URL。需要注意的是,根据JSF规范,使用这种方式时,在导航规则to-view-id之后添加redirect元素,OperaMasks引擎会终止当前请求,并发送http重定向响应到客户端。重定向响应告诉客户端下一个页面使用哪个URL。如果选择“重定向”,则地址栏里是被请求的URL,浏览器会根据server的重定向响应跳转到新的页面。

重定向的使用方法是:

  /combo.xhtml
   
      success  (如果返回值为success则执行下面的操作跳转到test.xhtml页面)
      /test.xhtml
      (url地址:从当前的comb.xhtml跳转到test.xhtml,请求作用域中的数据会丢失)
   
      
      failure(如果返回值为failure则执行下面操作跳转到error.xhtml页面,
导航处理将存储在请求作用域中的所有名称
/值(key/value)发送到下一个页面即这里的error.xhtml页面中)
      /error.xhtml
   

说明:用了redirect后,页面显示的url地址栏将发生变化,由跳转前的combo.xhtml页面跳转到test.xhtml页面。

当然,不管是否做"重定向"的选择,渲染出来的页面都是正常的。重定向页面比转发页面,因为需要到浏览器进行另外一次往返。但是重定向允许浏览器更新地址,一般作为书签的页面可以使用redirect元素。如果不使用redirect元素,导航处理将存储在请求作用域中的所有名称/值(key/value)发送到下一个页面。如果使用了redirect元素,则请求作用域中的数据会丢失。

OperaMasks对于重定向的使用也进行了一定的改进,可以在方法的代码中实现,不必在配置文件中写导航规则。实现的方法为:

public String login(){
  if(username.equals(name)){ 
     return "view:redirect:mainmenu.xhtml"; 
  }else{ 
     return "login.xhtml"; 
  }
}
点击按钮命令后,可以直接实现页面的跳转。