jsf 2.0

更新时间:2024-01-19 07:12:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

JSF2.0系列(一)

JSF 2.0的最终规范也已经发布了有近一个月了,在近期试用了一些新功能和特性,带来了很多漂亮的特性和愉快的体验。试用之余,迫不及待的希望与众多开发工程师们分享JSF 2.0带来的这些改变,或者说给我们开发带来的便利以及思想上的变革。

自从JSF 2.0立项起,就一直关注他,除了他承诺的那些技术和思想上的先进性,更多的原因是由于他为适应Web 2.0开发应用而提出的简化开发流程,提供灵活便捷的组件开发模式;或者可以说是由于他承诺在提高开发人员效率方面的努力。在从Mojarra项目获取beta版实现并试用后,我非常兴奋,JSF 2.0的专家组很好的完成了他们的承诺,并有很多超出预期的惊喜。

不废话了,现在就从开发者的角度列出我认为全新引入的最重要的两个特性:

1、 Facelets界面组件模型

在JSF 2.0中引入了全新的界面表现模型Facelets,可以方便的实现自有组件定制和页面模版化。既强化了JSF提出以来的组件式开发思想,又简化了自有组件的开发。从Tapestry吸收来的模版方式不仅可以让开发工程师像搭积木一样组合一个页面,更可以搭好架子后只在相关页面中只修改需要改变的部分。Facelets还有一大好处,就是将所有java代码从页面标签中移出,让分工更明细了,分工合作本来就是人类发展的一大基石,在这儿也体现了。

采用全新界面模型后还带来了些辅助功能和好处,其一就是性能的大幅度提升,由于Facelets采用W3C的xhtml规范,是一个严格的xml规范,组件树渲染不再需要如jsp一样编译成class文件后再运行,可以直接渲染,而大大提升了渲染速度,整体性能比jsp应该会提升不少。另外为了支持自有组件开发,JSF 2.0加入了一个resources约定,将自己创建的组件放于此目录下,省掉了xml配置文件中的说明。

2、 内置的Ajax支持

JSF 2.0吸取了众多开源框架的优点,将Ajax浑然一体的植入了规范中,并且借助Facelets的界面组件,将Ajax的开发完全简化了。大多数的Ajax交互甚至不用在页面中加入任何javascript代码。其中引入标签 f:ajax 和javascipt方法jsf.ajax.request 以及相配套的回调方法。

为了适应Ajax,在JSF 2.0中引入了一个全新的ManageBean的作用范围View Scope,此作用范围是在此视图存在时有用,当导航到新的视图时失效。正暗合了ajax当前页面局部更新的道理。

还有一些特性的加强和性能方面的提升也是很重要的:

a、 引入annotation申明managebean,大大简化了xml配置文件

b、 引入resources模型,将css、javascript、图片等资源统一管理,并提供更高效的加载速度。 c、 性能上的提升:根据变化情况保存、恢复视图,而不是每次恢复全部视图。组件缺省为无状态,根据视图重新恢复组件状态,减少ViewState的大小,提高传输性能等。 d、 增强的事件模型和生命周期

可以说,JSF 2.0是最大的一次更新了,还有很多新的特性就不一一说明了,接下来的文章中我就以新出的两个功能做一些简单的例子和介绍。与大家一起分享。 .

JSF2.0系列(二)

pout 发表于http://www.leefn.com 时间2009-07-10 12:42

这里假设你对eclipse的开发环境已经比较熟悉了,我们直接从配置和开发开始,与eclipse相关的功能就不多做介绍了。另外还假设你对JSP、JSTL等都有初步了解。

一、 配置JSF 2.0开发环境

首先下载软件:Eclipse IDE for Java EE Developers (189 MB)或者Myeclipse 7.5 、JSF 2.0的Beta1版本(mojarra-2.0.0-Beta1) 下载地址:

eclipse:http://www.eclipse.org/downloads/ mojarra2.0.0bate1:

https://javaserverfaces.dev.java.net/files/documents/1866/135560/mojarra-2.0.0-Beta1-binary.zip

好了,配置好eclipse的开发环境。将获得的JSF 2.0实现包mojarra-2.0.0-Beta1-binary.zip解压缩, 可以看见一个lib目录,目录下的两个文件jsf-api.jar jsf-impl.jar就是JSF 2.0的接口和参考实现了,也是我们开发中 要使用的了。下面我们就一步步来配置开发环境。

1、 用Eclipse创建一个Web Project,选择Java EE 5.0,取名TestJsf2.0,其他一切如常,这样创建了一个工程TestJsf2.0。

2、 打开工程TestJsf2.0的编译路径配置:工程TestJsf2.0上右键点击,选择 Build Path ->Configure Build Path…,在Libraries 中添加你刚才下载的两个jar 包:

jsf-api.jar jsf-impl.jar,并在Order and Export中将这两个jar包移到 Java EE 5 libraries前面(这一步非常重要,由于java ee 5中包含了JSF 1.2,如果不改动编译使用jar包 的顺序,首先采用的就是JSF 1.2,这样很多JSF 2.0中的功能就无法使用了)。 3、 在web.xml中加入JSF支持 Web.xml代码

1. 2. Faces Servlet 3. javax.faces.webapp.FacesServlet 4. 1 5. 6. 7. 8. Faces Servlet 9. /faces/* 10. *.xhtml 11. 这样设置后,整个初步配置工作就完成了,接下来我们就来看看一个初步的例子,页面表现采用新加入标准的facelets。

二、 一个简单的例子。

我们先来看看两个文件:

helloworld.xhtml Html代码 1. 2. 6. 7. Hello World 8. 9. 10. 11. 12. 13. 14. 15. Hello,#{hello.name}! 16. 17. 18. 19. HelloWorld.java Java代码

1. package test; 2. import javax.faces.bean.ManagedBean; 3. import javax.faces.bean.SessionScoped; 4. 5. @ManagedBean(name=\) 6. @SessionScoped 7. public class HelloWorld implements java.io.Serializable{ 8. private static final long serialVersionUID = 6866250699219535733L; 9. private String name; 10. 11. /** 12. * @return the name 13. */ 14. public String getName() { 15. this.name = \; 16. return name; 17. } 18. } 看看helloworld.xhtml,如果你对facelets比较熟悉,那对这样的写法就不陌生了。其中ui头就是新加入的facelets表现标签 了。另外相对于JSF 1.2还加入了 h:head, h:body。#{hello.name}这一个就直接关联了ManagedBean中的 name属性了,现在不用一定加在h:outputText标签中了,这是为了简洁加入的新的方式。

再看看ManagedBean,其中最大的变化就是加入了Annotation:ManagedBean和SessionScoped,这是 JSF 2.0中新引入的,这样就可以直接简化了faces-config.xml。这个例子中根本不需要这个配置文件就可以运行了。好了,在浏览器中 输入:http://localhost:8080/TestJsf2.0/helloworld.xhtml 就能看见结果了。

JSF2.0系列(三)

pout 发表于http://www.leefn.com 时间2009-07-10 12:42

在本篇介绍中,我们开始接触JSF2.0纳为标准的最重要的特性之一,facelets组件模型,整个组件模型的特性是很多的,我在本系列中只能做简单的介绍,并试图用比较简单的例子为大家揭示JSF2.0带给我们独特而快捷的开发体验。

从本篇开始,我采用同一个例子,给大家依次揭示JSF2.0的组件与Ajax模型等重要内容。另外有任何问题,请在JSF2.0组中提出来,大家一起探讨JSF2.0的开发。

在本篇中,主要揭示自定义组件的过程,在过程中,我还会给大家演示一下JSF2.0中其他的一些特性。现在自定义组件非常简单,下面就用一个例子来说明。

一、 创建一个应声器:

接上一篇中的工程TestJsf2.0,在其中加入如下文件: echo.xhtml: Html代码

1. 2. 6. 7. 测试简单的复合组件 8. 9. 10. 11. 12. 13. 14. 这个应声器的作者是:#{echo.encoder.author}。 15. 16. 17. 18. 19. 请输入响应文字: 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 响应: 30. 31. 32. 33. InputEcho.java: Java代码

1. package test; 2. import javax.faces.bean.ManagedBean; 3. import javax.faces.bean.SessionScoped; 4. @ManagedBean(name = \) 5. @SessionScoped 6. public class InputEcho implements java.io.Serializable { 7. 8. private static final long serialVersionUID = 9113785890193860362L; 9. private String echoText; 10. private EchoEncoder encoder; 11. 12. public InputEcho() { 13. encoder = new EchoEncoder(); 14. } 15. 16. /** 17. * @return the encoder

18. */ 19. public EchoEncoder getEncoder() { 20. return encoder; 21. } 22. 23. /** 24. * @return the echoText 25. */ 26. public String getEchoText() { 27. return echoText; 28. } 29. 30. public String getOutText() { 31. return encoder.Encode(echoText); 32. } 33. 34. /** 35. * @param echoText the echoText to set 36. */ 37. public void setEchoText(String echoText) { 38. this.echoText = echoText; 39. } 40. 41. public void echo() { 42. } 43. } EchoEncoder.java: Java代码

1. package test; 2. 3. public class EchoEncoder implements java.io.Serializable{ 4. 5. private static final long serialVersionUID = 8306351263183979293L; 6. private String author = \; 7. 8. /** 9. * @return the author 10. */ 11. public String getAuthor() { 12. return author; 13. } 14. 15. public String Encode(String msg) { 16. return msg.replaceAll(\, \).replaceAll(\, \).replaceAll(\\\n\, \); 17. } 18. } 先看第一个文件echo.xhtml,其中action=\,此处没有如JSF1.2中写一个表达式,这是新加入的一种导航方式,可以直接写文 件的除后缀以外的名称,JSF2引擎会自动找到对应的文件,然后导航。另外看看escape=\属性,这个是为了直接将内容中的标签以 html方式显示,你可以调整本例中escape以及后台返回的outText的方法,看看前面的显示,这是非常有趣的。

好了,这个例子可以运行了,在页面中输入http://localhost:8080/TestJsf2.0/echo.xhtml就可以访问了。

二、 将输入值组件化:

现在真正将上述例子用自定义的复合组件改写一下,整个过程会非常简单,后台的bean都不用改写,只用改变页面就行。

我们看看自定义的组件echoInputText.xhtml,此页面需要放在WebRoot下的resources/echo/文件夹下。

echoInputText.xhtml: Html代码

1. 2. 3. 7. 8. 9. 10. 11. 12. 13. 14. 15. 请输入响应文字: 16. 17. 18. 19.

此文件将echo.xhtml中的 Xml代码

1. 2. 请输入响应文字: 3. 4. 提取出来,做成一个echoInputText组件,然后修改echo.xhtml为以下样子:

echo.xhtml: Html代码

1. 2. 7. 8. 测试简单的复合组件 9. 10. 11. 12. 13. 14. 15. 这个应声器的作者是:#{echo.encoder.author}。 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 响应: 28. 29. 30. 31. 这两个文件修改后就可以运行了。

我们来分析一下自定义的echoInputText组件,先看看echo.xhtml文件有什么变化。看看xml命名空间中

加入了 xmlns:echo=\,这个就是用来引用自定义的组件的,其中 http://java.sun.com/jsf/composite/会默认指向到resources文件夹,后面直接跟资源的目录。 resources文件夹是JSF2.0的一个默认资源放置文件夹,后面的echo就是指resources/echo/文件夹了。整个命名空间的意思就 是将此文件夹命名为echo。再看看echo.xhtml文件中一处变化:

此段告诉我们直接采用了echo命名空间下的echoInputText组件,其中有一个属性为echo,指向的就是managed bean:echo。

再看看echoInputText组件: Html代码

1. 2. 3. 这一段用来定义此组件接口,并且定义一个属性,属性名为echo。 Xml代码 1. 2. 3. 请输入响应文字: 4. 5. 6. 这一段用来实现组件,其实中间的内容就是原先echo.xhtml文件中的输入组件,cc.attrs是JSF2.0组件定义中默认属性,可以用来引用接口中定义的属性。

最后,我们已经完成了一个简单的自定义符合组件,其中还用到了一下新的特性,大家可以多多查看JSF2.0的接口定义,去更多的了解。

在下一篇中我们来一起看看JSF2.0组件中另外一个激动人心的改进,页面模版化。

本文来源:https://www.bwwdw.com/article/d3xo.html

Top