点击这里使用RSS订阅本Blog: rel="alternate" href="http://feed.feedsky.com/softwave" type="application/rss+xml" title="RSS 2.0" /> <script language="javascript"> </script> <script language="javascript" src="http://www.feedsky.com/jsout/publishlist_v2.js?burl=softwave&out_html=true"></script>
JSF In Action 学习一
转自【http://www.blogjava.net/gembin/archive/2008/02/29/183012.html】首先介绍一下 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这样设置:
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 >
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
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 >
所有的元素都包含在<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>.是可选的,主要用于可视化工具里显示之用.
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 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
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 >
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 }
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里的对象;
上面的例子运行之后将会在浏览器上显示:
Hello
jsf,
Hello world!!
To be continued(待续...)
<script type="text/javascript" src="http://www.google.com/reader/ui/publisher.js"></script> <script type="text/javascript" src="http://www.google.com/reader/public/javascript/user/00697638153916680411/state/com.google/broadcast?n=5&callback=GRC_p(%7Bc%3A%22green%22%2Ct%3A%22%5Cu8FD9%5Cu4E9B%5Cu6587%5Cu7AE0%5Cu4E5F%5Cu503C%5Cu5F97%5Cu4E00%5Cu770B%22%2Cs%3A%22false%22%7D)%3Bnew%20GRC"></script>