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

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

 

 

JSF-Spring 4.0

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

>>JSF-Spring

JSF-Spring提供全面整合JSFSpring的代码,其独立实现,可以用于任何JSF实现。

兼容版本

  • JSF1.1

  • Springframework 2.0

特性

Spring1.1开始提供JSF支持。这里有两种方式的比较:

Spring:链接JSFSpring

Spring包含了一个JSF VariableResolver的实现,能识别Spring-managed beans,这样就可以在JSF中通过Bean的名称来访问它们。其实就是提供给JSF一个Spring beans的链接。这种解决方案对于大部分的情况来说已经够用了。

JSF-Spring:两个框架集成

JSF-Spring提供给Spring一个包含JSFManaged-beansWebApplicationContext,并将其集成至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应用,第一步就是如何安装配置SpringJSF。如果你已经安装配置过了,那么可以略过。

安装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>

并且定义JSFServlet,用于启动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>

注意,这里不是取代SpringContextLoaderListener,这两个都需要,而且定义这两个监听器的顺序很重要,首先是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>

如上所示,uiBeanJSF管理的,而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错误。

猜你喜欢

转载自blog.csdn.net/symgyz125/article/details/3394859
jsf