您的位置:首页 > 编程语言 > Java开发

JSF-Spring 4.0两个框架集成--邵京国

2008-11-27 22:39 465 查看


你想赚钱吗? 那就投我吧!IT从业人员最好的兼职网

JSF-Spring 4.0

近日,因为一项目,拟引入JSF-Spring-Hibernate组合,故稍做研究。虽然JSF目前离成熟还有一段距离,不过一般应用貌似够用了,如果发现问题倒也可以提一下,算是做一点贡献,另外JSF-Spring之组合,看到有名曰JSF-Spring的整合方案,故前往一阅,顺手译了一下。
>>JSF-Spring
JSF-Spring提供全面整合JSF和Spring的代码,其独立实现,可以用于任何JSF实现。
兼容版本

JSF1.1

Springframework 2.0

特性
Spring从1.1开始提供JSF支持。这里有两种方式的比较:
Spring:链接JSFSpring
Spring包含了一个JSF VariableResolver的实现,能识别Spring-managed beans,这样就可以在JSF中通过Bean的名称来访问它们。其实就是提供给JSF一个Spring beans的链接。这种解决方案对于大部分的情况来说已经够用了。
JSF-Spring:两个框架集成
JSF-Spring提供给Spring一个包含JSF的Managed-beans的WebApplicationContext,并将其集成至Spring的上下文中。这样Spring beans就可以使用JSF beans,并将JSF beans集成到Spring中,如此就提供了一个更全面的双向集成,包括在JSF beans中使用Spring的特性。此外,也能够集成SpringMVC以及通过Spring集成的其他基于行为的WEB应用框架(如Struts等)。和jsf-facelets一起使用,可以用Get方式提供表单,并且可以使用一般的JSP来编写WEB应用。
原文:
JSF-Spring
http://jsf-spring.sourceforge.net/index.shtml
>>JSF-Spring快速入门
这个入门将告诉你如何在一个WEB应用中使用JSF-Spring。这里假设已经有一个WEB应用,第一步就是如何安装配置Spring和JSF。如果你已经安装配置过了,那么可以略过。
安装Spring
http://www.springframework.org/download下载Spring(2.0),解压下面的jar文件到WEB-INF/lib目录:

dist/spring.jar

lib/Jakarta-commons/commons-logging.jar

然后,建立一个基本的应用上下文。
WEB-INF/applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?/gt;
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans></beans>
并且为在应用启动时Spring初始化定义监听器:
WEB-INF/web.xml (部分)
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
安装JSF
http://java.sun.com/javaee/javaserverfaces/download.html下载Sun的参考实现(V1.1.01)或从http://myfaces.apache.org/download.html下载MyFaces (核心1.1.4发布),并且将下载的压缩包中lib目录下的jar文件都复制到WEB-INF/lib中。如果你使用的是SUN的参考实现的话,还需要jstl.jar,这个包在JSF发布中没有提供。
然后,建立一个基本的配置文件:
WEB-INF/faces-config.xml
<?xml version='1.0' encoding='UTF-8'?>
<!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></faces-config>
并且定义JSF的Servlet,用于启动JSF,按管所有的请求:
WEB-INF/web.xml(部分)
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.jsf</url-pattern>
</servlet-mapping>
安装JSF-Spring
http://sourceforge.net/project/showfiles.php?group_id=107519下载JSF-Spring(4.0),并且解压下面的jar文件到WEB-INF/lib目录:

dist/jsf-spring.jar

dist/cglib-nodep-2.1_3.jar

然后,定义在应用启动时用于初始化JSF-Spring的监听器:
WEB-INF/web.xml (部分)
<listener>
<listener-class>
de.mindmatters.faces.spring.context.ContextLoaderListener
</listener-class>
</listener>
注意,这里不是取代Spring的ContextLoaderListener,这两个都需要,而且定义这两个监听器的顺序很重要,首先是Spring的,然后才是JSF-Spring的。
测试配置-一个简单的应用
为了检查JSF-Spring是否已配置好,这里将建立两个简单的Bean:一个服务Bean提供数据,另一个界面Bean格式化表现。
de/mindmatters/faces/quickstart/service/TimeService.java
package de.mindmatters.faces.quickstart.service;
import java.util.Date;
public interface TimeService {
Date getNow();
}
de/mindmatters/faces/quickstart/service/TimeServiceImpl.java
package de.mindmatters.faces.quickstart.service;
import java.util.Date;
public class TimeServiceImpl implements TimeService {
public Date getNow(){return new Date();}
}
WEB-INF/applicationContext.xml(部分)
<bean id="timeService" class="de.mindmatters.faces.quickstart.service.TimeServiceImpl" />
de/mindmatters/faces/quickstart/ui/UiBean.java
package de.mindmatters.faces.quickstart.ui;
import java.text.SimpleDateFormat;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.util.Assert;
import de.mindmatters.faces.quickstart.service.TimeService;
public class UiBean implements InitializingBean {
private TimeService timeService = null;
public void afterPropertiesSet() throws Exception {
Assert.notNull(getTimeService(), "timeService must be set");
}
public String getShortDate() {
return SimpleDateFormat.
getDateInstance(SimpleDateFormat.SHORT).
format(getTimeService().getNow());
}
public TimeService getTimeService() {
return timeService;
}
public void setTimeService(TimeService timeService) {
this.timeService = timeService;
}
}
WEB-INF/faces-config.xml (部分)
<managed-bean>
<managed-bean-name>uiBean</managed-bean-name>
<managed-bean-class>
de.mindmatters.faces.quickstart.ui.UiBean
</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
<managed-property>
<property-name>timeService</property-name>
<value>#{timeService}</value>
</managed-property>
</managed-bean>
如上所示,uiBean是JSF管理的,而timeService则是由Spring管理的。这样,可以得到Spring的好处,即InitializingBean。
现在,建立一个简单的页面用以渲染当前日期:
index.jsp
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<f:view>
<html>
<head>
<title>jsf-spring quickstart</title>
</head>
<body>
<h:outputText value="#{uiBean.shortDate}"/>
</body>
</html>
</f:view>
记住,这里访问该页面用/index.jsf,如果使用/或/index.jsp访问的话,请求将不能初FacesServlet接管,并会产生javax.servlet.jsp.JspException: Cannot find FacesContext错误。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: