基础辅导:JSF-Spring4.0两个框架集成
来源:优易学  2011-11-29 13:28:24   【优易学:中国教育考试门户网】   资料下载   IT书店
  拟引入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:链接JSF和Spring
  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错误。

责任编辑:小草

文章搜索:
 相关文章
热点资讯
资讯快报
热门课程培训