版权说明:本文书写过程中参照了红帽的技术文档;本系列文章中的部分测试代码为红帽公司版权所有,因此不能提供源码文件。
一、JavaServer Faces简介
Web应用程序,通常是从Web浏览器向服务器发出请求,由服务器处理请求以及生成发送回浏览器的响应。
上图中的请求处理器可以有以下几种:普通servlet、Struts、Spring MVC等等。 在本单元中,我们将探讨最近更新的框架JavaServer Faces version 2(JSF2)。
JavaServer Faces是用于创建基于Java的Web应用程序的服务器端组件框架。 JavaServer Faces框架包括:
典型的JSF2应用程序包含以下内容:
带标签的XHTML页面定义绑定到服务器端对象的页面组件。
一个或多个托管bean,提供对请求,会话或应用程序范围内的数据模型对象和应用程序逻辑的访问。
至少提供一个空的faces-config.xml文件。 可以在此文件中定义导航和bean,但从JSF2开始,这不是必需的。 此文件的存在(与CDI的beans.xml文件非常相似)可激活JSF行为。
如果需要非标准行为,则会提供web.xml文件,用于定义Web应用程序的大量配置设置。
二、JSF2 Web应用程序的剖析
所有Web应用程序都具有特定的目录结构。 这是一个简单的JSF应用程序的完整结构:
WebContent是Web应用程序的根。 如果Web应用程序的上下文(名称)是“xyz”,则在根文件名“xyz”之后,浏览器可以查找此根目录下的所有文件。 例如,您可以通过输入http://servername/xyz/index.html来显示index.html页面。 通常,所有面部页面都位于此根文件夹中,或者位于较大应用程序的子文件夹中。
文件夹META-INF和WEB-INF是特殊文件夹。 浏览器无法访问这些内容。 应用程序的服务器端组件可以完全访问这些文件夹。
特殊配置文件放在WEB-INF文件夹中,例如beans.xml(CDI)和faces-config.xml(JSF)。
WEB-INF / lib和WEB-INF / classes的内容由JBoss Developer Studio或Maven为您创建。 classes文件夹包含应用程序在Java源文件夹中定义的所有包和已编译的类。 lib文件夹包含项目中指定的所有依赖项。
三、JSF页面地址和映射
从Java EE 6开始不再需要web.xml文件。 JSF页面hello.xhtml可以引用如下:
/faces/hello.xhtml
/hello.jsf
这将映射到hello.xhtml。
欢迎文件列表包括index.html(和其他)。 欢迎文件列表是在Web地址不包含文件名时将尝试的文件名列表。 例如,给定http:// servername / xyz /,服务器将表现为输入了http://servername/xyz/index.html。 如果文件index.html不存在,它还会尝试其他一些文件名,但最好使用index.html作为欢迎文件。
四、实验展示:创建JSF项目的方法
在JBoss Developer Studio中创建JSF2应用程序
幸运的是,JBoss Developer Studio可以非常简单地启动一个新的JSF Web应用程序。 有几种选择,包括:
使用“新建项目”向导创建JSF项目
JSFBlankWithLibs:将JSF库依赖项添加到项目中的空JSF项目
JSFBlankWithoutLibs:一个没有库依赖项的空JSF项目 - 您将项目与JBoss EAP实例关联以查找所需的库
JSFKickStartWithoutLibs:一个没有库依赖项的示例JSF项目
建议使用运行时库,而不要在项目中包含依赖项。 这可确保应用程序针对将部署的相同库运行。
五、实验展示:Howdy, China!
我们导入一个已经存在的maven项目:
这个项目的类型是:Dynamic Web Project with CDI enabled
这个项目的两个核心代码:NameBean和hello.xhtml。
1. 首先创建托管Bean:NameBean
2.创建XHTML Facelet页面:hello.xhtml
3. 创建一个简单的重定向页面:index.html,其中的URL=hello.jsf,就是指向上面的hello.xhtml
源码分析:
hello.xhtml的代码的前台展示:
我们注意到上面的nameBean.message,实际上会调用NameBean中getmessage方法,代码如下:
我们继续分析hello.xhtml代码。下面代码的含义是,前台提示输入名字,会传递到NameBean中的name方法中:
下面代码的逻辑是:当name不等于空,且等于将输入字符串字符串头尾的空格去掉后值,在这种情况下,返回Howdy, name!
代码中rendered属性是用来控制该控件是否显示的,结果为ture时显示,false隐藏。
运行代码:
接下来,在EAP上运行代码:
我们先输入三个空格,再输入david:
点击提交:
我们会看到,返回正常。空格被消除,是因为代码中调用了trim
我们输入China,返回值如下:
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有