allwiki首页  
天下维客 你可以修改的网络知识库
首页最近更改优秀条目专题展示电脑科技词典软件学习网络知识电脑安全明星时尚天下百科
 

Java Server Face的示例

天下维客,你可以修改的网络知识库

Jump to: navigation, search

目录

示例应用需求说明

实现一个用户管理功能,要求将视图层、逻辑层、数据访问层分开,降低各层的偶合度。 下图是示例的简单类图,其中数据层采用DAO+Hibernate技术

Image:O_class_diagram.gif

UserForm代码

 package jsfdemo.forms;
 /**
  * Created date:2004-8-19
  * @author genstone
  *
  */
 public class UserForm
 {
   private String username;
   private Long userid;
   private String password;
   /**
    * @return Returns the username.
    */
   public String getUsername()
   {
       return username;
   }
   /**
    * @param username The username to set.
    */
   public void setUsername(String username)
   {
       this.username = username;
   }
   /**
    * @return Returns the password.
    */
   public String getPassword()
   {
       return password;
   }
   /**
    * @param password The password to set.
    */
   public void setPassword(String password)
   {
       this.password = password;
   }
   /**
    * @return Returns the userid.
    */
   public Long getUserid()
   {
       return userid;
   }
   /**
    * @param userid The userid to set.
    */
   public void setUserid(Long userid)
   {
       this.userid = userid;
   }
 }

UserHandler代码

 package jsfdemo.handlers;
 import jsfdemo.components.BaseComponent;
 /**
  * Created date:2004-9-20
  * @author genstone
  *
  */
  public class UserHandler
  {
   private BaseComponent component;
   /**
    * @return Returns the component.
    */
   public BaseComponent getComponent()
   {
       return component;
   }
   /**
    * @param component The component to set.
    */
   public void setComponent(BaseComponent component)
   {
       this.component = component;
   }
   public void save()
   {
       component.save();
   }
   public void delete()
   {
       component.delete();
   }
   public void modify()
   {
       component.modify();
   }
 }

UserComponent代码

 package jsfdemo.components;
 import net.sf.hibernate.HibernateException;
 import jsfdemo.beans.UserInfo;
 import jsfdemo.daos.BaseDAO;
 import jsfdemo.forms.UserForm;
 import jsfdemo.util.ValueObejctUtil;
 import util.Logger;
 /**
  * Created date:2004-9-20
  * @author genstone
  *
  */
 public class UserComponent implements BaseComponent
 {
   private UserForm userForm =null;
   private BaseDAO dao = null;
   /**
    * @return Returns the userForm.
    */
   public UserForm getUserForm()
   {
       return userForm;
   }
   /**
    * @param userForm The userForm to set.
    */
   public void setUserForm(UserForm userForm)
   {
       this.userForm = userForm;
   }
   public boolean save()
   {
       UserInfo info = ValueObejctUtil.getPersistObject((UserForm)userForm);
       try
       {
           //insert into database
           info.userid = (Long)dao.save(info);
       }
       catch (HibernateException e)
       {
           // TODO Auto-generated catch block
           Logger.getLogger(this.getClass()).error(e.getMessage());
       }
       //return forward page
       return true;
   }
   public boolean delete()
   {
       UserInfo info = ValueObejctUtil.getPersistObject((UserForm)userForm);
       try
       {
           //insert into database
           dao.delete(info);
       }
       catch (HibernateException e)
       {
           // TODO Auto-generated catch block
           Logger.getLogger(this.getClass()).error(e.getMessage());
       }
       //return forward page
       return true;
   }
   public boolean modify()
   {
       UserInfo info = ValueObejctUtil.getPersistObject((UserForm)userForm);
       try
       {
           //insert into database
           dao.update(info);
       }
       catch (HibernateException e)
       {
           // TODO Auto-generated catch block
           Logger.getLogger(this.getClass()).error(e.getMessage());
       }
       //return forward page
       return true;
   }
   /**
    * @return Returns the dao.
    */
   public BaseDAO getDao()
   {
       return dao;
   }
   /**
    * @param dao The dao to set.
    */
   public void setDao(BaseDAO dao)
   {
       this.dao = dao;
   }
 }

UserDAO代码

 package jsfdemo.daos;
 import util.Logger;
 import net.sf.hibernate.HibernateException;
 /**
  * This class has been automatically generated by Hibernate Synchronizer.
  * For more information or documentation, visit The Hibernate Synchronizer page
  * at <a href="http://www.binamics.com/hibernatesync" class="external free" target="_blank" title="http://www.binamics.com/hibernatesync" rel="nofollow">http://www.binamics.com/hibernatesync</a> or contact Joe Hudson at joe@binamics.com.
  *
  * This is the object class that relates to the tbl_user table.
  * Any customizations belong here.
  */
 public class UserInfoDAO extends BaseUserInfoDAO 
 {
   private String hibernateConfig = null;
   public UserInfoDAO()
   {
   }
   /**
    * @return Returns the hibernateConfig.
    */
   public String getHibernateConfig()
   {
       return hibernateConfig;
   }
   /**
    * @param hibernateConfig The hibernateConfig to set.
    */
   public void setHibernateConfig(String hibernateConfig)
   {
       this.hibernateConfig = hibernateConfig;
       try
       {
           this.initialize(this.hibernateConfig);
       }
       catch (HibernateException e)
       {
           // TODO 自动生成 catch 块
           Logger.getLogger(this.getClass()).error(e.getMessage());
           e.printStackTrace();
       }
   }
 }

配置文件:/WEB-INF/faces-config.xml

 <?xml version="1.0" encoding="UTF-8"?>
 <faces-config>
 <managed-bean>
   <managed-bean-name>user</managed-bean-name>
   <managed-bean-class>jsfdemo.forms.UserForm</managed-bean-class>
   <managed-bean-scope>session</managed-bean-scope>
 </managed-bean>
 <managed-bean>
   <managed-bean-name>userDAO</managed-bean-name>
   <managed-bean-class>jsfdemo.daos.UserInfoDAO</managed-bean-class>
   <managed-bean-scope>session</managed-bean-scope>
   <managed-property>
     <property-name>hibernateConfig</property-name>
     <value>/hibernate-config.xml</value>
   </managed-property>
 </managed-bean>
 <managed-bean>
   <managed-bean-name>userComponent</managed-bean-name>
   <managed-bean-class>jsfdemo.components.UserComponent</managed-bean-class>
   <managed-bean-scope>session</managed-bean-scope>
   <managed-property>
     <property-name>userForm</property-name>
     <value>#{user}</value>
   </managed-property>
   <managed-property>
     <property-name>dao</property-name>
     <value>#{userDAO}</value>
   </managed-property>
 </managed-bean>
 <managed-bean>
   <managed-bean-name>userHandler</managed-bean-name>
   <managed-bean-class>jsfdemo.handlers.UserHandler</managed-bean-class>
   <managed-bean-scope>session</managed-bean-scope>
   <managed-property>
     <property-name>component</property-name>
     <value>#{userComponent}</value>
   </managed-property>
 </managed-bean>

</faces-config>

配置文件:/WEB-INF/web.xml

 <?xml version="1.0" encoding="ISO-8859-1"?>
 <!DOCTYPE web-app
   PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
   "<a href="http://java.sun.com/j2ee/dtds/web-app_2_2.dtd" class="external free" target="_blank" title="http://java.sun.com/j2ee/dtds/web-app_2_2.dtd" rel="nofollow">http://java.sun.com/j2ee/dtds/web-app_2_2.dtd</a>">
 <web-app>
   <display-name>JavaServerFace Example Application</display-name>
 <context-param>
   <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
   <param-value>client</param-value>
 </context-param>
 <servlet>
   <servlet-name>facesServlet</servlet-name>
   <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
 </servlet>
 <servlet-mapping>
   <servlet-name>facesServlet</servlet-name>
   <url-pattern>*.jsf</url-pattern>
 </servlet-mapping>
 </web-app>

user_add.jsp代码

 <%@page contentType="text/html; charset=gb2312"%>
 <%@ taglib uri="<a href="http://java.sun.com/jsf/html" class="external free" target="_blank" title="http://java.sun.com/jsf/html" rel="nofollow">http://java.sun.com/jsf/html</a>" prefix="h" %>
 <%@ taglib uri="<a href="http://java.sun.com/jsf/core" class="external free" target="_blank" title="http://java.sun.com/jsf/core" rel="nofollow">http://java.sun.com/jsf/core</a>" prefix="f" %>
 <HTML>
 <HEAD>
 <title>JSF Demo</title>
 <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
 <STYLE>
 .input{height:18px;border:solid 1px #3979BD; background-color:#E7F3FF;color:#000000}
 .button {
   font-size: 12px;
   border-width: 1px;
   border-color: #d4d0c8;
   cursor: pointer;
   background-color: #dee0e0;
 }
 </STYLE>
 </HEAD>
 <BODY  marginwidth="0" marginheight="0">
 <f:view locale="zh">
  <h:form>
   <td>
       <font size="4">添加用户</font></b>


用户名称 <h:inputText value="#{user.username}" required="true" styleClass="input"/>


密码 <h:inputSecret value="#{user.password}" required="true" styleClass="input"/>


           <h:commandButton value="Save" action="#{userHandler.save}" styleClass="button"/>


   </td>
   
 
  </h:form>
 </f:view>
 </BODY>
 </HTML>

注意

在浏览器中调用user_add.jsp文件时,注意应按照web.xml文件中JSF的servlet-mapping的配置调用,即调用时按照如下方式:

 <a href="http://192.168.1.10:8080/jsfdemo/user_add.jsf" class="external free" target="_blank" title="http://192.168.1.10:8080/jsfdemo/user_add.jsf" rel="nofollow">http://192.168.1.10:8080/jsfdemo/user_add.jsf</a>

若servlet-mapping配置如下

 <servlet-mapping>
   <servlet-name>facesServlet</servlet-name>
   <url-pattern>*.faces</url-pattern>
 </servlet-mapping>

在浏览器中调用jsp页面为http://192.168.1.10:8080/jsfdemo/user_add.faces

JSF框架会自动映射到相应的jsp文件

以上示例使用Eclipse3.0开发,Tomcat4.1.29+j2sdk1.4.1环境测试运行正常

在Web UI实现托拽式快速开发

以上讲述了JSF的原理,在实际开发中,根据使用的IDE不同,使用JSF框架快速开发的流程也有所不同。现今,提供JSF开发的工具主要是一些商用的开发工具,如Webshpere5.12,Jbuilder等。Eclipse的第三方插件Exadel JSF Studio支持JSF开发。对Eclipse的Exadel JSF开发请参考http://www.exadel.com/downloads/jsf/userguide/index.html。

对websphere的JSF开发请参考以下文章:http://www-106.ibm.com/developerworks/websphere/techjournal/0401_barcia/barcia.html

Personal tools
工具
金银币拍卖 金币拍卖预展  金银币网店 熊猫金银币 生肖金银币