前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Howdy,China!:构建JSF Web Application第一篇

Howdy,China!:构建JSF Web Application第一篇

作者头像
魏新宇
发布2018-10-23 15:17:18
1.2K0
发布2018-10-23 15:17:18
举报

版权说明:本文书写过程中参照了红帽的技术文档;本系列文章中的部分测试代码为红帽公司版权所有,因此不能提供源码文件。

  • 本文的内容仅限于技术探讨,不能作为指导生产环境的素材;
  • 本文分为系列文章,将会有多篇,初步预计将有多篇。
  • 笔者鼓励读者购买红帽培训获得更多系统性的培训。

一、JavaServer Faces简介

Web应用程序,通常是从Web浏览器向服务器发出请求,由服务器处理请求以及生成发送回浏览器的响应。

上图中的请求处理器可以有以下几种:普通servlet、Struts、Spring MVC等等。 在本单元中,我们将探讨最近更新的框架JavaServer Faces version 2(JSF2)。

JavaServer Faces是用于创建基于Java的Web应用程序的服务器端组件框架。 JavaServer Faces框架包括:

  • 一个强大的API,包括:
  • 网页组件模型和状态管理
  • 事件通知和事件处理程序
  • 数据转换和验证
  • 页内导航
  • 国际化支持
  • 可访问性支持
  • 用于创建网页组件的标记库
  • 能够将网页组件绑定到服务器端对象
  • 完全支持上下文和依赖注入(CDI)

典型的JSF2应用程序包含以下内容:

  • Web Pages

带标签的XHTML页面定义绑定到服务器端对象的页面组件。

  • Managed Beans

一个或多个托管bean,提供对请求,会话或应用程序范围内的数据模型对象和应用程序逻辑的访问。

  • Faces Configuration File(s)

至少提供一个空的faces-config.xml文件。 可以在此文件中定义导航和bean,但从JSF2开始,这不是必需的。 此文件的存在(与CDI的beans.xml文件非常相似)可激活JSF行为。

  • Web Deployment Descriptor

如果需要非标准行为,则会提供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,返回值如下:

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-10-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大魏分享 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档