细说如何整合spring+hibernate +jsf
原创作者:黄颢鹏
(注:转载前请注明作者名和出处,如违反该款作者保留追究权利
作者QQ:25950329、 Email:anh3000@qq.com)
摘 要 本文从java web开发中的web.xml配置进行详细讲解,并结合实际代码讲述了如何整合spring+hibernate+jsf
关键词 spring hibernate jsf 整合
我平时习惯使用MyEclipse 6.5 Blue开发JAVA EE的Web应用,因此在下面讲述的代码和文件配置都是采用MyEclipse 6.5 Blue撰写的。其中本文所用到的类包版本是jsf1.2、spring2.0、hibernate3.1。
1、 整合前的准备
1.1、新建项目
启动MyEclipse 6.5 Blue,选择菜单项目上的File->Web Project,在打开的对话框中选择J2EE Specification Level中的JAVA EE5.0,新建立一个Web开发项目名为Test。本文所用到的类包全部都放在项目的WebRoot->WEB-INF->lib下。
如果你整和后发现出现以下错误异常:
严重: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
org.springframework.beans.factory.BeanDefinitionStoreException: Line 4 in XML document from ServletContext resource [/WEB-INF/spring-hibernate-beans.xml] is invalid; nested exception is org.xml.sax.SAXParseException: cvc-elt.1: Cannot find the declaration of element 'beans'.
org.xml.sax.SAXParseException: cvc-elt.1: Cannot find the declaration of element 'beans'.
导致这样的异常多数是spring应用缺少了必要的类包,以下是必需包:
Spring包(9个):
commons-dbcp.jar、commons-pool.jar、spring.jar、spring-beans.jar、
spring-context.jar、spring-core.jar、spring-dao.jar、
spring-hibernate3.jar、spring-web.jar。
至于其它的JSF和Hibernate的类包比较简单,这里就不多说了。
1.2、配置JSF应用,实现JSF第一个的Hello World程序
1.2.1、基本的JSF配置
打开目录下WebRoot->WEB-INF的web.xml,可以看到如下xml代码:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
其中<welcome-file>index.jsp</welcome-file>是网站欢迎的首页,这里不做改动,然后把以下代码放在<web-app></web-app>之间,至此整个项目的JSF配置完成了,
<!--jsf的基本配置-->
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>3</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.faces</url-pattern>
</servlet-mapping>
现在,在MyEclipse 6.5 Blue中选中项目Test右击弹出彩单中选择New->JSP(Advanced Templates),新建立一个JSF文档,在新建文件对话框中的Template to use中选择Default JSF template,文件名默认为MyJsp.jsp,启动tomcat,打开游览器,输入地址http://127.0.0.1:8080/Test/MyJsp.faces,如看到This is my JSF JSP page.字样就说明JSF框架基本配置成功,当然这只是JSF 配置成功的第一步。
1.2.2、JSF中的托管Bean配置
JSF中的托管Bean都是写在faces-config.xml中的,下面我们新建立第一个jsf的托管bean。 在项目的src文件夹中建立包com.test.jsf(注:该包是专门放jsf使用的类),在该包中新建一个类名为T1`,代码如下
package com.test.jsf;
public class T1 {
private String msg;
public void setMsg(String msg) {
this.msg = msg;
}
public String getMsg() {
this.msg="Hello,World";
return this.msg;
}
}
在项目目录WebRoot->WEB-INF中新建faces-config.xml文件,把以上代码写入faces-config.xml文件,
<!DOCTYPE faces-config PUBLIC "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN" "http://java.sun.com/dtd/web-facesconfig_1_1.dtd">
<faces-config>
<!-- managed-bean就是托管Bean了 -->
<managed-bean>
<managed-bean-name>t1</managed-bean-name>
<!-- com.test.jsf.T1就是上面新建立的类 -->
<managed-bean-class>com.test.jsf.T1</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>
</faces-config>
至于<managed-bean-scope>request</managed-bean-scope>中的request参数,还有session参数等等的选择,根据我的理解和jsp中的useBean中的参数类型的含义是差不多的,但这只是我个人理解,具体的含义请参看有关jsf的书籍。
然后我们改写前面的MyJsp.jsp文件,具体代码如下:
<%@ page language="java" pageEncoding="ISO-8859-1"%>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSF 'MyJsp.jsp' starting page</title>
</head>
<body>
<f:view>
<h:form>
<h:outputText escape="false" rendered="true" value="#{t1.msg}"/>
</h:form>
</f:view>
</body>
</html>
启动tomcat,打开游览器,输入地址http://127.0.0.1:8080/Test/MyJsp.faces,如看到Hello,World字样就说明JSF托管Bean配置成功了。