首先介绍一下
JSF(JavaServer Faces)JSF是JavaEE标准的一部分, 是基于组建的架构(component architecture), 而且是事件驱动的,其目的在于把WebApp的开发可以向DesktopApp一样. 可以使各个常用的UI Widgets组件化, 提高重用性,简化创建Web UI的工作量,并且它也提供了丰富的功能集包含事件处理机制(Event Handling Mechanism)、页面导航(Page Navigation)、验证客户端数据(Input Validation)和数据转换(Conversion)等等。JSF框架最主要的特色之一就是它并不仅针对于一种类型的客户端,意味着除了用于桌面的Html浏览器客户端外,它甚至还可能支持用于移动电话的Wml浏览器客户端等。现在已经有很多的Vender在支持JSF:Apache Software Foundation, BEA Systems,Borland Software, IBM, Oracle, Macromedia,等等。
JSF她的实现常用的有(当然还有其他的):
1. Sun
RI (
Reference
Implementation)
和一般的WebApp一样放在WEB-INF/lib下
所需的lib: jsf-api.jar (在JSF specification定义的API)
jsf-impl.jar (Sun JSF的参考实现)
jstl.jar (JSTL API)
standard.jar (JSTL的实现Implementation)
2. Apache MyFaces
所需的lib: myfaces-api-1.2.2.jar
myfaces-impl-1.2.2.jar
jstl.jar (JSTL API)
standard.jar (JSTL的实现Implementation)
commons-beanutils-1.7.0.jar
commons-codec-1.3.jar
commons-collections-3.2.jar
commons-digester-1.8.jar
commons-el-1.0.jar
commons-discovery-0.4.jar
commons-logging-1.1.1.jar
配置环境:
1.配置web.xml
1 <web-app>
2
3 <servlet>
4 <servlet-name>Faces Servlet</servlet-name>
5 <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
6 </servlet>
7 <servlet-mapping>
8 <servlet-name>Faces Servlet</servlet-name>
9 <url-pattern>/faces/*</url-pattern>
10 </servlet-mapping>
11
12 </web-app>
和传统的Struts类似,JSF也有配置文件faces-config.xml,并且她支持多个Config文件,可以在web.xml这样设置:
1 <web-app>
2
3 <context-param>
4 <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
5 <param-value>server</param-value>
6 </context-param>
7 <context-param>
8 <param-name>javax.faces.CONFIG_FILES</param-name>
9 <param-value>/WEB-INF/config1.xml,/WEB-INF/config2.xml</
10 param-value>
11 </context-param>
12
13 <web-app>
2.配置faces-config.xml,在这里声明managed beans, 并且它支持 EL expression,其实所有的JSF Component都支持EL expression
所有的元素都包含在<faces-config></faces-config>之间,以下是常用的
managed-bean元素
1 <managed-bean>
2 <description>Used for testing.
3 </description>
4 <managed-bean-name>testBean</managed-bean-name>
5 <managed-bean-class>net.blogjava.gembin.TestBean
6 </managed-bean-class>
7 <managed-bean-scope>session</managed-bean-scope>
8 </managed-bean>
以上
managed-bean的这3个元素是必须的,还有<description><display-name>, and <icon>.是可选的,主要用于可视化工具里显示之用.
定义完managed beans 之后就可以在JSP页面上引用它了。test.jsp
1 <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
2 <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
3 <html>
4 <head>
5 <title>Hello</title>
6 </head>
7 <body>
8 <f:view>
9 <h:outputText value="Hello #{testBean.sayHello}!"/>
10 </f:view>
11 </body>
12 </html>
TestBean.java
1 package net.blogjava.gembin;
2
3 public class TestBean{
4
5 public TestBean(){}
6
7 public String sayHello(){
8 return "jsf, Hello world!";
9 }
10 }
这里注意test.jsp中只能有1个
<f:view> 元素,并且它不代表任何UI,是JSF UI的Root
managed-bean-scope的值可以是:session,application,request,none。
每个托管的对象(managed-bean)不能引用生命周期比它还短的对象,所以
- 存放在request scope的Object可以引用none, application, session, request里的对象;
- 存放在session scope的Object可以引用none, application, session里的对象;
- 存放在application scope的Object可以引用none, application里的对象;
- 存放在none scope的Object可以引用none里的对象;
由此可见none scope 非常有用。
上面的例子运行之后将会在浏览器上显示:
Hello jsf, Hello world!!
To be continued(待续...)