Java Server Faces(JSF)技术为开发基于网络用户界面的Java开发者提供了标准的编程接口API以及标记库。Apache Struts框架的作者Craig McClanahan,协助领导了Sun公司的JSF项目。这使项目能够容易的从流行的Apache向JSF标准移植得到了保证。就像Struts框架一样,JSF定义了一套JSP标记,能够生成与JavaBean属性绑定在一起的HTML表单元素。
从应用开发者的角度看,两种框架是很相似的,但是JSF可能将会得到更多的支持。因为JSF是Java的标准。在未来的发展中,有可能所有的J2EE应用服务器都需要支持JSF(Java Server Faces)。
本文包含一个由四个主要部分组成的网络应用:
1. JavaBean类(PBean.java),作为数据模型保存一些文本以及相关属性:字体、大小、 颜色、摆放位置等;
2. 基于JSF的表单(edit.jsp),使用户可以为JavaBean的属性赋值;
3. Java类(PBuilder.java),用给定的文本按照其属性值生成HTML页面程序;
4. JSP页面(view.jsp),显示生成的HTML页面。
JavaServer Faces(或者叫JSF)是服务端程序开发新的发展趋势。它可以使你更轻松的的设计程序,你的程序也能够更容易维护,甚至可能还会使你的工作更有趣。Budi Kurniawan向我们展示了JSF技术,解释了为什么JSF如此有用以及它是否实现了所承诺的功能。
图1:基于JSF的表单
制作JSF表单
当你开发网络应用时,处理HTML表单是最常见的一项任务。一个好的框架能够节省很多开发时间,因为许多日常的程序操作可以自动的完成或是减少到最低限度只需要在XML文件中用几行完成。这也有可能简化使用JSP标记库的网络开发。
Java Server Faces框架提供了JSP标记,用于描述表单、管理表单状态、确认用户输入以及报错、将用户界面组件与JavaBean属性绑定在一起以及其他许多可提高开发效率的功能。JSF也有丰富的编程接口可用于建立定制的用户界面(UI)组件,定制验证类(验证器validator)以及服务端的事件监听器。
JSF包含两类标记库分别叫JSF核心库与HTML基础库。前者提供普通的标记和一些用于在用户界面组件中注册验证器以及事件监听器的标记。后者包含用于描述用户界面组件的JSP标记,如:按钮、文本域、复选按钮、列表等。文件edit.jsp用这些标记建立了表单。两种标记库的标准前缀是f和h,并且定义在edit.jsp文件的最前面:
- <%@ taglib prefix="f" uri="http://java.sun.com/jsf/core"; %>
- <%@ taglib prefix="h" uri="http://java.sun.com/jsf/html"; %>
<f:use_faces>标记是容器标记,必须包含所有在同一页面中出现的JSF标记。该标记不会产生任何HTML内容,但是它会触发JSF的内部机制。<h:form>标记产生能够包含用户界面元素的HTML元素<form>。
- <html>
- <head>
- <title>Edit</title>
- </head>
- <body>
- <f:use_faces>
- <h:form formName="pform">
- ..........
- </h:form>
- </f:use_faces>
- </body>
- </html>
上面的JSP代码生成下面的HTML片断:
- <html>
- <head>
- <title>Edit</title>
- </head>
- <body>
- <form method="post" action="/usingjsf/faces/edit.jsp">
- ..........
- </form>
- </body>
- </html>
#p#
下一部分介绍应用的JavaBean模型。
管理Bean
像其他一些Web框架一样,JSF将用户界面从封装数据以及应用逻辑的对象模型中分离出来。当HTML用户界面由JSF标记产生时,JSF框架从JavaBean模型获得数据并设置HTML表单用户界面组件的属性状态。用户提交表单时,JSF验证用户输入,如果全部正常JSF就将用户输入保存到JavaBean模型并且HTTP请求会根据“导航规则”进入下一页面。如果验证出现错误,JSF回到表单并返回错误信息,这样用户就可以纠正错误输入。
类Pbean遵循JavaBean规范,实现了java.io.Serializable并为其属性(文本、大小、字体、颜色、摆放位置、粗体、斜体、下划线)提供了相应的get及set方法。JSF每一个应用的用户都创建了一个PBean的实例,该实例存储在JSP的会话(session)中并在名为faces-config.xml的XML格式配置文件中指定ID。JSF也会根据faces-config.xml文件提供的数据初始化JavaBean实例的属性值。该XML文件还可能包含其他JSF配置参数,如:导航规则。
下面的XML程序片断包含由JSF所管理的JavaBean的声明:
- <?xml version="1.0"?>
- <!DOCTYPE faces-config PUBLIC
- "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.0//EN"
- "http://java.suncom/dtd/web-facesconfig_1_0.dtd";>
- <faces-config>
- ..........
- <managed-bean>
- <managed-bean-name>pbean</managed-bean-name>
- <managed-bean-class>
- com.devsphere.articles.usingjsf.PBean
- </managed-bean-class>
- <managed-bean-scope>session</managed-bean-scope>
- <managed-property>
- <property-name>text</property-name>
- <null-value/>
- </managed-property>
- <managed-property>
- <property-name>size</property-name>
- <value>3</value>
- </managed-property>
- <managed-property>
- <property-name>font</property-name>
- <values>
- <value>Arial</value>
- <value>Courier New</value>
- </values>
- </managed-property>
- <managed-property>
- <property-name>color</property-name>
- <value>green</value>
- </managed-property>
- <managed-property>
- <property-name>align</property-name>
- <value>left</value>
- </managed-property>
- <managed-property>
- <property-name>bold</property-name>
- <value>false</value>
- </managed-property>
- <managed-property>
- <property-name>italic</property-name>
- <value>true</value>
- </managed-property>
- <managed-property>
- <property-name>underline</property-name>
- <value>false</value>
- </managed-property>
- </managed-bean>
- </faces-config>
由JSF创建的管理bean能够根据<managed-bean-scope>元素的值而存储在请求(request)、会话(session)或应用的范围内。<managed-bean-scope>元素的值可为空值。如果一个对象已经指定了ID并注册在给定的范围内那么JSF不会建立JavaBean实例。
注:
源代码下载地址:http://www.onjava.com/onjava/2003/09/03/examples/usingjsf-src.zip
相关文档
原文:Introducing JavaServer Faces(http://www.onjava.com/pub/a/onjava/2003/07/30/jsf_intro.html)
译文:http://www.matrix.org.cn/forum_view.asp?forum_id=14&view_id=658
【编辑推荐】