公司动态
当前位置:首页 > 公司动态 > 学术交流 > 使用JSF导航

       主要讲解如何配置Web应用程序的导航,是如何根据用户动作和业务逻辑确定输出,从一页面跳转到下一页。

静态导航:

        在Web应用程序中当用户填写网页表单时,用户可能填写文本,单机单选按钮,或选择列表。所有这些编辑操作都发生在用户浏览器内,当用户单机按钮提交表单数据时,这些数据将传输到服务器。同时,Web应用程序分析用户输入,确定使用哪个JSF页面来呈现响应。导航处理程序负责选择下一个JSF页面。

简单的Web应用中,网页导航是静态的。就是说单机特定按钮总是选择固定的JSF来呈现响应。需要为每一个按钮赋予一个action特性:

<h:commandButton label=”Login” action=”welcome”/>

动作(action)特性的值被称作结果(outcome)。结果可以有选择地被映射到一个视图ID(在JSF规范中,一个JSF页面被称作视图)。如果结果没有文件扩展名,则后置当前视图扩展名,如果结果没有以a/开头,则前置当前视图路径。

动态导航:

        大多数的Web应用中,导航不是静态的。页面流不仅取决于用户点击那个按钮,也取决于用户输入。比如提交一个登陆页面可能会有成功或失败两种结果。结果取决于计算,也就是说,用户名和密码是否合法。

要实现动态导航,提交按钮必须有一个方法表达式:

<h:commandButton label=”Login” action=”#{Bean.方法名}” />

在action特性中,方法表达式不带参数。它可以具有任何的返回类型。返回值通过toString被转换为一个字符串。

动作方法可以返回null来表示应该重新显示同一页面。在这种情况下视图作用域被保留。任何非空的结果都会清除视图作用域,即使作为结果的视图与当前视图相同也是如此。

当用户点击命令按钮,而命令的action特性是方法表达式,则执行以下步骤:

(1)获取指定的Bean。

(2)调用应用的方法并返回结果。

(3)结果转换成一个视图。

(4)显示与视图ID对应的页面。

        因此,要实现分支行为,需要在适当的Bean类中提供一个方法引用。可以很多位置放置该方法,最好找一个具有决策所需全部数据的类。

将结果映射到视图ID:

        JSF的一个重要设计目标是分离表示逻辑和业务逻辑。当动态做出导航决策时。计算结果的代码并非一定要知道Web页面的确切名称。JSF提供了一种机制,用于将逻辑结果通过navigation-rule条目添加到faces-config.xml中来实现该机制。

<navigation-rule>

<form-view-id>/index.xhtml</from-view-id>

<navigation-case>

  <from-outcome>success</from-outcome>

  <to-view-id>/welcome.xhtml</to-view-id>

</navigation-case>

</navigation-rule>

       该规则规定,如果success结果在/index.xhtml中出现,就将其导航到/welcome.xhtml

如果用户仔细地选取结果字符串,就可将多个导航规则分组,包含logout的按钮可能遍布于应用程序的多个页面中。使用以下的单个规则,用户能将所有这些按钮导航到LoggedOut.xhtml页面。

        应用未指定from-view-id元素,该规则适用于所有页面。也可将导航规则与相同的form-viwe-id合并。

简单应用程序可能不要有使用导航规程。但随着应用程序变得越来越复杂,在受管Beam中使用逻辑结果,以及使用将结果映射到目标视图的导航规则是非常有意义的。

重定向:

        你可以要求JSF实现重定向到一个新视图。JSF实现然后将一个HTTP重定向发送到客户端。重定向响应告诉客户端下一页面使用哪个URL。客户端然后生成该URL的GET请求。

        重定向页面速度较慢,应为需要到浏览器进行另一次往返。但重定向允许浏览器更新地址栏。如果不适用重定向,那么当从一个页面移到另一个页面时,原始的URL保持不变。如果使用重定向,浏览器会显示新URL。

      为了尽量减少会话作用域的滥用,尽可能使用请求作用域是很有意义的。如果没有重定向元素,那么可以在下一个视图中显示的数据使用请求作用域范围内的Bean。

  1. 客户端将请求发送到服务器。
  2. 使用请求作用域内的Bean填充请求作用域映射。
  3. 服务器向客户端发送HTTP状态以及重定向位置。当前的请求至此结束,并移除请求作用域内的Bean。
  4. 客户端生成到新位置的GET求情、服务器呈现下一个视图。但是先前请求作用域内的Bean不再可用。

       总结

       JSF导航最简单的情况简捷明了:命令按钮和连接的 可以只返回一个用于指定下一个页面的结果。但如果要施加更多控制,也可以使用JSF框架提供的必须的工具。

 

版权归威海众成信息科技股份有限公司所有,转载请注明出处。

 

参考资料

《JavaServer Faces 核心变成(第三版)》