论文部分内容阅读
摘要:为了方便用户使用,多数网站都采用了页面导航。而在JSF2.0中,为了方便进行页面导航,增加了RESTful导航的内容,这很大程度的改善了JSF框架。该文着重介绍了JSF2.0中的RESTful导航方式,并对其导航处理进行了分析。
关键词:导航;重定向;表述性状态转移
中图分类号:TP311文献标识码:A文章编号:1009-3044(2012)07-1546-02
Exploring the RESTful Navigation Way in JSF2.0
HOU Yan-mei
(Dept. of Information,Capital University of Economic and Business, Beijing 100070, China)
Abstract: In order to facilitate the user use, many web sites are adopting page navigation. And in JSF2.0, in order to facilitate assessment page navigation, increased the RESTful navigation elements, which greatly improved the JSF framework. This paper introduces the RESTful navigation way in JSF2.0, and analyzed the navigation processing.
Key words: navigation; redirection; RESTful
2009年基于组件的框架的JSF2.0正式发布了,伴随而来的是更简单的操作,更完美的整合,更规范的标准,以及对更多技术的支持等等。而在这种种变化中,不难发现Web页面导航也在发生着巨大的变化。导航最原始的定义是通过绑定到超媒体信息上的超链接在页面间跳转的动作。而在今天网络信息爆炸的情况下,导航的作用已不能局限于页面间的跳转,还包括程序信息的传递和转移。JSF提供了多种导航方式,尤其是新发布的JSF2.0,其更加丰富了页面导航方式的种类。而在多种导航方式中最引起人们注意的还是RESTful的导航方式。
默认情况下,JSF应用程序像服务器产生一系列的POST请求。每一个POST请求包含格式化的数据。这对于需要用户输入信息的应用程序是很有意义的。但是我们知道,在许多程序中,我们并不需要输入任何信息,只是通过简单的单击超级链接或是按钮来实现页面间的跳转。还有另外重要的一点,为了通过重访URL能够返回到同一页面,相应的链接都应该是可标示的,所有的页面都是缓存的。但是,POST请求在标示或者缓存上是无效的,这为创建高效的网页造成了很大的阻碍。
1 RESTful简介
为了解决这个问题,JSF2.0提出了一种被称为REST(Representational State Transfer)的风格的设计理念,它倡导页面应该像HTTP事先预想的那样工作。查找应该使用GET请求。PUT,POST和DELETE请求应该用来创建、修改和删除。
GET请求用来查找信息,如http://myserver.com/animals?kind=fish,这即是一种RESTful。但是GET请求不能用来更新信息。如为动物增加一个新的种类就是不恰当的。GET请求应该是等幂的。简单的说就是指第二次提出请求与第一次提出应该是没有什么不同的。但对于动物来说提出两次请求就是增加两种动物。这也说明在一个大的应用程序中,POST请求在上下文是非常恰当的。因此,RESTful网页需要共享部分POST请求,仅仅依靠GET请求是不可能完成全部任务的。
一般的,JSF对于产生或是使用URL并没有一个标准的机制,但是从JSF2.0开始,RESTful支持GET请求。我们将在下面的段落中详细介绍。
2 RESTful中的GET请求
2.1视图参数
http://myserver.com/ animals?kind=fish语句中,动物的种类名称kind被作为查询参数。当服务器端收到该请求时,参数值被转换为相应的bean值,这就是使用视图参数的目的。
在页面的顶端加上如下标签:
处理请求时,种类kind的值被传递给animals类的setCurrentKind()方法。
JSF页面可以有很多视图参数。和其他请求参数一样,视图参数可以被转换和验证。
2.2 GET请求链接
使用h:commandButton和h:commandLink标记会产生POST请求,为了使用户能够用GET请求进行导航,需要通过使用h:button或是h:link标记在页面添加发送GET请求的按钮或是链接。
对于这些请求,需要控制目的视图ID和查询参数。目的视图ID由outcome属性确定,而其属性值可以是一个固定值,如:
或者也可以选择提供一个值表达式:
此时,getOutcome()方法被激活并一定会产生一个结果字符串。结果字符串以普通方式放入到导航处理中,产生目标视图ID。
GET请求链接中的outcome属性在页面呈现之前被计算,链接被嵌入到页面中。
2.3指定请求参数
在大多数情况下,向服务器发送一个请求而没有任何请求参数是没有什么意义的。如果没有请求参数,服务器就得不到上下文数据,也无法根据上下文数据为客户创建“个性化”的响应。
GET请求链接的参数来源于:
1)结果字符串
2)视图参数
3)嵌入在f:param标签中
当结果字符串作为请求参数时,导航处理器从目标视图ID结果中取下原始参数并将其计算后的结果添加为新的参数。如:
示例中,导航处理首先会从取下outcome的参数index?q=1,将其计算。由于JSF中规定:
1)如果outcome属性值没有文件扩展名,附加上当前视图的扩展名。
2)如果outcome属性值不是以/开头,首先考虑当前视图的路径。
这里,我们假设当前视图扩展名为.xhtml,则计算的结果为/index.xhtml?q=1,将其添加为目标视图ID的新的outcome的值。
当outcome属性的值是复合参数时,要使用分隔符
关键词:导航;重定向;表述性状态转移
中图分类号:TP311文献标识码:A文章编号:1009-3044(2012)07-1546-02
Exploring the RESTful Navigation Way in JSF2.0
HOU Yan-mei
(Dept. of Information,Capital University of Economic and Business, Beijing 100070, China)
Abstract: In order to facilitate the user use, many web sites are adopting page navigation. And in JSF2.0, in order to facilitate assessment page navigation, increased the RESTful navigation elements, which greatly improved the JSF framework. This paper introduces the RESTful navigation way in JSF2.0, and analyzed the navigation processing.
Key words: navigation; redirection; RESTful
2009年基于组件的框架的JSF2.0正式发布了,伴随而来的是更简单的操作,更完美的整合,更规范的标准,以及对更多技术的支持等等。而在这种种变化中,不难发现Web页面导航也在发生着巨大的变化。导航最原始的定义是通过绑定到超媒体信息上的超链接在页面间跳转的动作。而在今天网络信息爆炸的情况下,导航的作用已不能局限于页面间的跳转,还包括程序信息的传递和转移。JSF提供了多种导航方式,尤其是新发布的JSF2.0,其更加丰富了页面导航方式的种类。而在多种导航方式中最引起人们注意的还是RESTful的导航方式。
默认情况下,JSF应用程序像服务器产生一系列的POST请求。每一个POST请求包含格式化的数据。这对于需要用户输入信息的应用程序是很有意义的。但是我们知道,在许多程序中,我们并不需要输入任何信息,只是通过简单的单击超级链接或是按钮来实现页面间的跳转。还有另外重要的一点,为了通过重访URL能够返回到同一页面,相应的链接都应该是可标示的,所有的页面都是缓存的。但是,POST请求在标示或者缓存上是无效的,这为创建高效的网页造成了很大的阻碍。
1 RESTful简介
为了解决这个问题,JSF2.0提出了一种被称为REST(Representational State Transfer)的风格的设计理念,它倡导页面应该像HTTP事先预想的那样工作。查找应该使用GET请求。PUT,POST和DELETE请求应该用来创建、修改和删除。
GET请求用来查找信息,如http://myserver.com/animals?kind=fish,这即是一种RESTful。但是GET请求不能用来更新信息。如为动物增加一个新的种类就是不恰当的。GET请求应该是等幂的。简单的说就是指第二次提出请求与第一次提出应该是没有什么不同的。但对于动物来说提出两次请求就是增加两种动物。这也说明在一个大的应用程序中,POST请求在上下文是非常恰当的。因此,RESTful网页需要共享部分POST请求,仅仅依靠GET请求是不可能完成全部任务的。
一般的,JSF对于产生或是使用URL并没有一个标准的机制,但是从JSF2.0开始,RESTful支持GET请求。我们将在下面的段落中详细介绍。
2 RESTful中的GET请求
2.1视图参数
http://myserver.com/ animals?kind=fish语句中,动物的种类名称kind被作为查询参数。当服务器端收到该请求时,参数值被转换为相应的bean值,这就是使用视图参数的目的。
在页面的顶端加上如下标签:
处理请求时,种类kind的值被传递给animals类的setCurrentKind()方法。
JSF页面可以有很多视图参数。和其他请求参数一样,视图参数可以被转换和验证。
2.2 GET请求链接
使用h:commandButton和h:commandLink标记会产生POST请求,为了使用户能够用GET请求进行导航,需要通过使用h:button或是h:link标记在页面添加发送GET请求的按钮或是链接。
对于这些请求,需要控制目的视图ID和查询参数。目的视图ID由outcome属性确定,而其属性值可以是一个固定值,如:
或者也可以选择提供一个值表达式:
此时,getOutcome()方法被激活并一定会产生一个结果字符串。结果字符串以普通方式放入到导航处理中,产生目标视图ID。
GET请求链接中的outcome属性在页面呈现之前被计算,链接被嵌入到页面中。
2.3指定请求参数
在大多数情况下,向服务器发送一个请求而没有任何请求参数是没有什么意义的。如果没有请求参数,服务器就得不到上下文数据,也无法根据上下文数据为客户创建“个性化”的响应。
GET请求链接的参数来源于:
1)结果字符串
2)视图参数
3)嵌入在f:param标签中
当结果字符串作为请求参数时,导航处理器从目标视图ID结果中取下原始参数并将其计算后的结果添加为新的参数。如:
示例中,导航处理首先会从取下outcome的参数index?q=1,将其计算。由于JSF中规定:
1)如果outcome属性值没有文件扩展名,附加上当前视图的扩展名。
2)如果outcome属性值不是以/开头,首先考虑当前视图的路径。
这里,我们假设当前视图扩展名为.xhtml,则计算的结果为/index.xhtml?q=1,将其添加为目标视图ID的新的outcome的值。
当outcome属性的值是复合参数时,要使用分隔符