JSF入门深入学习.docx
- 文档编号:2163222
- 上传时间:2023-05-02
- 格式:DOCX
- 页数:18
- 大小:25.11KB
JSF入门深入学习.docx
《JSF入门深入学习.docx》由会员分享,可在线阅读,更多相关《JSF入门深入学习.docx(18页珍藏版)》请在冰点文库上搜索。
JSF入门深入学习
JSF入门1
SF入门1
JSF与Struts的异同9
OperaMasks版本说明与获取14
OperaMasks版本说明与获取14
OperaMasks产品包目录结构14
OperaMasks安装与部署16
JSF入门
1.什么是JavaServerFaces(jsf)?
JSF为JAVA的Web应用用户界面的开发人员提供了标准的编程接口、丰富可扩展的UI组件库(一个核心的JSP标记库用来处理事件、执行验证以及其他非UI相关的操作和一个标准的HTML标记库来表示UI组件)、事件驱动模型等一套完整的Web应用框架,通过JSF,您可以在页面中轻松自如地使用WEB组件、捕获用户行为所产生的事件、执行验证、建立页面导航…,当使用支持JSF的开发工具来开发JSF应用的时候,一切将会变得异常简单,GUI方式拖放组件、修改组件属性、建立组件间关联以及编写事件侦听器等等
JSF有三部分:
一套预制的UI组件集
一个事件驱动的编程模型
一个允许第三方开发者提供附加组件的组件模型
JSF包含处理事件所需的所有代码和组件组织,开发者可以忽略这些细节而专注于应用逻辑。
2.第一个JSF程序
JSF只是J2EE的一个标准,是一套接口集和一些基本实现,要使用JSF需要下载jsf的实现,可以到JSF官方网站的下载区下载参考实现,也可以到apache下载myfaces,这里以使用sun的参考实现为例,在下载压缩文件并解压缩之后,将其lib目录下的jar文件复制至您的Web应用程序的/WEB-INF/lib目录下,另外您还需要jstl.jar与standard.jar文件,这些文件您可以在sample目录下的应用中找到,建好我们的应用目录结构:
hellojsf
|--build.xml
|--src
|--WEB-INF
|----|--web.xml
|----|--faces-config.xml
|----|--classes
|----|--lib
|----|----|--jsf-impl.jar
|----|----|--jsf-api.jar
|----|----|--commons-digester.jar
|----|----|--commons-collections.jar
|----|----|--commons-beanutils.jar
|----|----|--commons-logging.jar
|----|----|--standard.jar
|----|----|--jstl.jar
可能只有faces-config.xml,它是jsf的基本配置文件,后面就可以看到它的作用。
下面我们就开始写程序了,没有什么复杂逻辑,不用细说他的流程,直接写了。
//hello.jsp保存在根目录下
DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">
<%@tagliburi="prefix="f"%>
<%@tagliburi="prefix="h"%>
view>
JSFinAction-Hello,world!
formid="welcomeForm"> outputTextid="welcomeOutput" value="WelcometoJavaServerFaces! " style="font-family: Arial,sans-serif;font-size: 24; color: green;"/> messageid="errors"for="helloInput"style="color: red"/> outputLabelfor="helloInput"> outputTextid="helloInputLabel"value="Enternumberofcontrolstodisplay: "/> outputLabel> inputTextid="helloInput"value="#{helloBean.numControls}"required="true"> validateLongRangeminimum="1"maximum="500"/> inputText> panelGridid="controlPanel" binding="#{helloBean.controlPanel}" columns="20"border="1"cellspacing="0"/> commandButtonid="redisplayCommand"type="submit"value="Redisplay"actionListener="#{helloBean.addControls}"/> commandButtonid="goodbyeCommand"type="submit"value="Goodbye"action="#{helloBean.goodbye}"immediate="true"/> form> view> 从这个页面可以看出,jsf就是用他自己的UI组件代替了html标签,又加了些特有的属性,很容易理解,值得注意的是,所有组件都要定义在 view> view>之内,熟悉jsp的可能对”#{helloBean.numControls}“感觉很熟悉,不同的是这个是以”#“开头的,”binding“属性的值是个jsfel表达式,它指定了helloBean类中的controlPanel方法可以直接对此组件进行操作,h: commandButton是按钮组件,可以产生actionevent,他的actionListener属性制定了用helloBean类中的addControls方法来处理这个actionevent,其他的都比较容易理解,来看下个页面。 //goodbye.jsp保存在根目录下 DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN"> <%@tagliburi="prefix="f"%> <%@tagliburi="prefix="h"%> view> JSFinAction-Hello,world! formid="goodbyeForm"> outputTextid="welcomeOutput"value="Goodbye! " style="font-family: Arial,sans-serif;font-size: 24; font-style: bold;color: green;"/> outputTextid="helloBeanOutputLabel"value="Numberofcontrolsdisplayed: "/> outputTextid="helloBeanOutput"value="#{helloBean.numControls}"/> form> view> 这个页面更简单,只是一些输出。 在hello.jspgoodbye.jsp中都通过jsfel表达式引用了一个backingbean,叫helloBean,他包括了我们这个应用所需的一切 //HelloBean.java保存在src下 packageorg.jia.hello; importjavax.faces.application.Application; importponent.html.HtmlOutputText; importponent.html.HtmlPanelGrid; importjavax.faces.context.FacesContext; importjavax.faces.event.ActionEvent; importjava.util.List; publicclassHelloBean { privateintnumControls; privateHtmlPanelGridcontrolPanel; publicintgetNumControls() { returnnumControls; } publicvoidsetNumControls(intnumControls) { this.numControls=numControls; } publicHtmlPanelGridgetControlPanel() { returncontrolPanel; } publicvoidsetControlPanel(HtmlPanelGridcontrolPanel) { this.controlPanel=controlPanel; } publicvoidaddControls(ActionEventactionEvent) { Applicationapplication=FacesContext.getCurrentInstance().getApplication(); Listchildren=controlPanel.getChildren(); children.clear(); for(intcount=0;count { HtmlOutputTextoutput=(HtmlOutputText)application.createComponent(HtmlOutputText.COMPONENT_TYPE); output.setValue(""+count+""); output.setStyle("color: blue"); children.add(output); } } publicStringgoodbye() { return"success"; } } jsf的backingbean很简单,不需要继承于某个特定类,只是一个包含事件处理方法的javabean 这里面最复杂的就是addControls方法了,它是一个actionlistener方法,因为他接收了一个唯一的参数ActionEvent,在hello.jsp中: ” commandButtonid="redisplayCommand"type="submit"value="Redisplay"actionListener="#{helloBean.addControls}"/>“,这句话告诉jsf,当用户点击"Redisplay"按钮时jsf会用这个方法来处理actionevent goodbye方法象addControls一样,是eventlistener的一种类型,但他是于jsf的导航系统联系起来的,所以他的工作就是返回一个字符串或逻辑输出,这样导航系统就可以决定下一个要加载的页面,这一类的方法叫做actionmethods.在hello.jsp中: ” commandButtonid="goodbyeCommand"type="submit"value="Goodbye"action="#{helloBean.goodbye}"immediate="true"/>“,当用户点击”Goodbye“按钮时,goodbye方法会被执行,他只是返回"success",在配置文件中这个输出与某个页面相联系,下面就来看看配置文件faces-config.xml //faces-config.xml xmlversion="1.0"? > DOCTYPEfaces-configPUBLIC "-//SunMicrosystems,Inc.//DTDJavaServerFacesConfig1.0//EN" " jsf象大多数框架一样,有一个配置文件,在之中你可以定义导航规则、初始化javabean、注册你自己的jsf组件、验证器,和一些面向jsf应用其他方面的其他配置 在这个配置文件中定义了一个bean,指定了他的名字(这个名字就是我们在页面中使用的名字),类全名,和使用范围。 还定义了一个导航规则,hello.jsp有一个”Goodbye“按钮转到其他页,所以只有一个单独的navigation-case,当输出为”success"时,就会显示goodbye.jsp。 现在我们已经写完了页面,backingbean,和配置文件,下面写完web.xml后就可以看到效果了 //web.xml xmlversion="1.0"encoding="UTF-8"? > DOCTYPEweb-appPUBLIC"-//SunMicrosystems,Inc.//DTDWebApplication2.3//EN" " WelcometoJavaServerFaces. FacesServlet是做jsf应用是一定要指定的,还设了默认页为hello.jsp. 运行build,启动webserver,在地址栏中打入应用地址,看到刚刚写的应用了吧,通过实际效果结合代码,相信我们已经对jsf已经有一个基本认识了。 JSF与Struts的异同 http: //www.jcp.org/en/jsr/detail? id=314 jsf2.0下载页 Struts和JSF/Tapestry都属于表现层框架,这两种分属不同性质的框架,后者是一种事件驱动型的组件模型,而Struts只是单纯的MVC模式框架,老外总是急吼吼说事件驱动型就比MVC模式框架好,何以见得,我们下面进行详细分析比较一下到底是怎么回事? 首先事件是指从客户端页面(浏览器)由用户操作触发的事件,Struts使用Action来接受浏览器表单提交的事件,这里使用了Command模式,每个继承Action的子类都必须实现一个方法execute。 在struts中,实际是一个表单Form对应一个Action类(或DispatchAction),换一句话说: 在Struts中实际是一个表单只能对应一个事件,struts这种事件方式称为applicationevent,applicationevent和componentevent相比是一种粗粒度的事件。 struts重要的表单对象ActionForm是一种对象,它代表了一种应用,这个对象中至少包含几个字段,这些字段是Jsp页面表单中的input字段,因为一个表单对应一个事件,所以,当我们需要将事件粒度细化到表单中这些字段时,也就是说,一个字段对应一个事件时,单纯使用Struts就不太可能,当然通过结合JavaScript也是可以转弯实现的。 而这种情况使用JSF就可以方便实现, inputTextid="userId"value="#{login.userId}"> valueChangeListenertype="logindemo.UserLoginChanged"/> inputText> #{login.userId}表示从名为login的JavaBean的getUserId获得的结果,这个功能使用struts也可以实现,name="login"property="userId" 关键是第二行,这里表示如果userId的值改变并且确定提交后,将触发调用类UserLoginChanged的processValueChanged(...)方法。 JSF可以为组件提供两种事件: ValueChanged和Action.前者我们已经在上节见识过用处,后者就相当于struts中表单提交Action机制,它的JSF写法如下: commandButtonid="login"commandName="login"> actionListenertype=”logindemo.LoginActionListener”/> commandButton> 从代码可以看出,这两种事件是通过Listerner这样观察者模式贴在具体组件字段上的,而Struts此类事件是原始的一种表单提交Submit触发机制。 如果说前者比较语言化(编程语言习惯做法类似Swing编程);后者是属于WEB化,因为它是来自Html表单,如果你起步是从Perl/PHP开始,反而容易接受Struts这种风格。 基本配置 Struts和JSF都是一种框架,JSF必须需要两种包JSF核心包、JSTL包(标签库),此外,JSF还将使用到Apache项目的一些commons包,这些Apache包只要部署在你的服务器中既可。 JSF包下载地址: Implementation。 JSTL包下载在http: //jakarta.apache.org/site/downloads/downloads_taglibs-standard.cgi 所以,从JSF的驱动包组成看,其开源基因也占据很大的比重,JSF是一个SUN伙伴们工业标准和开源之间的一个混血儿。 上述两个地址下载的jar合并在一起就是JSF所需要的全部驱动包了。 与Struts的驱动包一样,这些驱动包必须位于Web项目的WEB-INF/lib,和Struts一样的是也必须在web.xml中有如下配置: 这里和Struts的web.xml配置何其相似,简直一模一样。 正如Struts的struts-config.xml一样,JSF也有类似的faces-config.xml配置文件:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JSF 入门 深入 学习