)
JSF是JAVA EE规范的一部分。它是:Java Web应用的用户界面框架。
l JSF提供一套API以及标签库,用来创建页面表单以及复杂的界面元素
l JSF使得编写表单提交的代码更加简单,这些代码可以响应那些不同的按钮提交,改变某些值或某些用户的选择等等
l Managed beans:使得JSF简化了处理请求参数的方法
l EL(Expression Language):JSF有一套表达式语言用来访问java bean的属性以及集合元素等。
l 提供表单域类型转换以及验证
实现包
Apache的myfaces包是第一个开源的JSF实现。Myfaces有一些扩展的包,这些包是对JSF标准组件的扩充,可以协助我们更加快速的开发。Myfaces的扩展包括:
* Tomahawk :myfaces提供了一系列远远超过规范规定的组件,这些组件可以兼容JSF1.1的参考实现,以及其它兼容JSF1.1规范的其它实现,当然也兼容myfaces的JSF实现。
* Tobago:目标是提供一套基于JSF以及myfaces的良好设计的UI组件。Tobago不仅仅只是一套标签库。下面的几点让它与其它框架不同:
- 无需HTML设计,聚焦于商业应用程序的开发。开发者可以将精力集中在用户界面上,而不是网页。
- UI组件是对HTML的抽象,它不仅仅可以用于HTML页面,它的输出格式可以定制。
- “主题”机制,使得可以很容易切换应用程序的外观。
- 布局管理器可以自动排列组件,这就意味着无需使用HTML表格或其它技术来手工管理组件的布局。
* Trinidad:JSF1.1的组件库
最新的myfaces包(版本是:1.1.1)是对JSF1.1规范的实现。
UI组件模型
JSF提供一套丰富灵活的组件模型,包括:
l 一套UIComponent类,定义UI组件的状态和行为。
l 呈现模型:定义如何用不同的方式来呈现组件
l 事件和监听器模型用来处理组件的事件。
l 转换模型:进行数据转换
l 验证模型:如何验证数据的合法性
UI组件类
比如UIForm、UIInput等等,具体请参考文档。
组件呈现模型
不同的组件会有不同的呈现方式,同一个组件可能会有不同的呈现方式,比如UISelectOne,可以使用radio来呈现,也可以使用下拉框来呈现等。这些,都是通过呈现模型来定义的。
数据转换模型
当一个组件绑定到一个对象上之后,对于组件数据来说,总共有两个视图:
一个是模型视图:从这个角度去看,数据表现为java对象的类型,如int ,long,Date等等
一个是呈现视图:从这个角度去看,数据表现为一种可以被人读取或修改的形式。比如一个Date类型,可能被展现为一个yyyy-MM-dd格式的字符串,或者是三个字符串,分别代表年、月、日。
可以定义自己的转换器来转换数据。
事件与监听器模型
事件:值改变事件、动作事件、数据模型事件。
值改变:比如输入框的值被更改、选中了checkbox等
动作事件:点击按钮或超链接
数据模型事件:UIData组件的一行被选中的时候触发这个事件。
导航模型
Navigation-rule,可以包含一个from-view-id和多个navigation-case
每个navigation-case中,主要包括转向的页面。
From-view-id : 当前页面
From-action:从哪个action方法
From-outcome:从哪个逻辑名称
To-view-id:转向哪个页面
导航解决的问题是:从哪里到哪里。一句话来说就是:从from-view-id页面,当from-action方法被调用而且其返回值是from-outcome的时候,转向to-view-id页面。
当导航发生的时候,即使没有调用action方法,但也会设置相应Backing Bean的属性(如果当前的Form域绑定了属性的话)。
安装JSF:下载http://java.sun.com/j2ee/javaserverfaces/download.html
1、在Eclipse中添加JSF的支持:
不要选择Install JSF Jars and packaged TLDS和Install JSF TLDs,因为我们要安装的版本跟Eclipse支持的版本不一样,我们用的是新的版本。在MyEclipse中添加支持的目的,是为了可以使用MyEclipse的页面导航设计器,避免我们手工编写页面导航的繁琐性。
点击完成即可。
myEclipse添加了JSF的配置文件和修改了web.xml文件!
为了跟新版本的myfaces配合,我们最好将web.xml中关于myfaces的配置全部按照下面的说明重新配置一遍:
我们的例子以myfaces的实现包以及Tomahawk的扩展包作为学习JSF的起点。
依赖包可以在tomahawk-examples-1.1.6-bin/myfaces-example-blank-1.1.6.war中找到。
2、添加依赖包:
将依赖包拷贝到WEB-INF/lib下面,如果已经有的包,可以选择覆盖或不覆盖,然后解决其中版本有冲突的包,将低版本的包去掉!
冲突的包主要包括:commons-collections,commons-fileupload,commons-lang,commons-logging
3、修改web.xml文件,添加如下内容:
l 指定配置文件的位置
<context-param>
<param-name>javax.faces.CONFIG_FILES</param-name>
<param-value>/WEB-INF/faces-config.xml</param-value>
</context-param>
|
l Tomahawk的过滤器,用于解释那些扩展的功能
<filter>
<filter-name>extensionsFilter</filter-name>
<filter-class>org.apache.myfaces.webapp.filter.ExtensionsFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>extensionsFilter</filter-name>
<url-pattern>*.jsf</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>extensionsFilter</filter-name>
<url-pattern>/faces/*</url-pattern>
</filter-mapping>
|
l Myfaces的Servlet
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.jsf</url-pattern>
</servlet-mapping>
|
4、在WEB-INF目录下,添加faces-config.xml配置文件
<?xml version="1.0"?>
<!DOCTYPE faces-config PUBLIC
"-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.0//EN"
"http://java.sun.com/dtd/web-facesconfig_1_1.dtd" >
<faces-config>
</faces-config>
|
下一篇将结合MyEclipse对JSF的支持来开发JSF的程序。