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事实上是页面名称,可以省略文件的扩展名 · 除了能转到同一目录下的其它页面外,当然也可以转到其它目录的页面,这时可以使用..和/进行页面定位。
在导航的处理方式上,OperaMasks也提供了两种选择,转发(forward)方式与重定向(redirect)方式。默认情况下,使用转发方式,服务器端直接将请求转发到新的页面。由于转发行为完全发生在服务器端,从当前页面跳转到另一个页面后,浏览器地址栏保留的是请求的URL。需要注意的是,根据JSF规范,使用这种方式时,在导航规则to-view-id之后添加redirect元素,OperaMasks引擎会终止当前请求,并发送http重定向响应到客户端。重定向响应告诉客户端下一个页面使用哪个URL。如果选择“重定向”,则地址栏里是被请求的URL,浏览器会根据server的重定向响应跳转到新的页面。 重定向的使用方法是: <navigation-rule>
<from-view-id>/combo.xhtml</from-view-id>
<navigation-case>
<from-outcome>success</from-outcome> (如果返回值为success则执行下面的操作跳转到test.xhtml页面) <to-view-id>/test.xhtml</to-view-id>
<redirect />(url地址:从当前的comb.xhtml跳转到test.xhtml,请求作用域中的数据会丢失) </navigation-case> <navigation-case>
<from-outcome>failure</from-outcome>(如果返回值为failure则执行下面操作跳转到error.xhtml页面, <to-view-id>/error.xhtml</to-view-id>
</navigation-case> </navigation-rule>
说明:用了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";
}
}
点击按钮命令后,可以直接实现页面的跳转。
|
|