现在的位置: 首页 > 综合 > 正文

JSF In Action 学习一

2014年09月05日 ⁄ 综合 ⁄ 共 3439字 ⁄ 字号 评论关闭

点击这里使用RSS订阅本Blog:

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这样设置:

 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)不能引用生命周期比它还短的对象,所以

  1. 存放在request scope的Object可以引用none, application, session, request里的对象;
  2. 存放在session scope的Object可以引用none, application, session里的对象;
  3. 存放在application scope的Object可以引用none, application里的对象;
  4. 存放在none scope的Object可以引用none里的对象;

 由此可见none scope 非常有用。
上面的例子运行之后将会在浏览器上显示:

Hello jsf, Hello world!!

To be continued(待续...)
 

抱歉!评论已关闭.