JSF2.0与Spring3的整合

本文详细介绍了如何将JSF与Spring框架进行整合,包括配置web.xml、faces-config.xml及BackBean依赖注入等步骤。通过具体示例展示了实体类与服务层如何作为受管bean在JSF中使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于JSF与EJB的整合资料比较少,没找到。

 

所以以普及度很高的spring为例。

 

步骤是非常简单的,主要有两条思路一是让所有的beanJSF的@ManagedBean和spring的@Component各自分管,经过实验他们之间的注入依赖在同一个bean里不能混用。比如如果class是@ManagedBean如果field上@Resource就会出错。只能用@ManagedProperty(value="#{xxxServiceImpl}")这样注入。而且当在class上同时@ManagedBean@Component是@ManagedBean更加优先。

 

第一步:

web.xml开发环境下的配置

 

 <!-- spring启动监视器 -->

  <listener>

    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

  </listener>

 

  <context-param>

    <param-name>contextConfigLocation</param-name>

    <param-value>classpath:beans.xml</param-value>

  </context-param>

 

  <!-- jsf额外需要的spring监视器 -->

  <listener>

   <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>

  </listener>

 

   <!-- JSF2.0的配置-->

    <servlet>

    <servlet-name>Faces Servlet</servlet-name>

    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>

  </servlet>

  <servlet-mapping>

    <servlet-name>Faces Servlet</servlet-name>

    <url-pattern>*.jsf</url-pattern>

  </servlet-mapping>

<!-- JSF2.0的模式配置,开发模式下会在调试时报更加详细的错误-->

  <context-param>

    <param-name>javax.faces.PROJECT_STAGE</param-name>

    <param-value>Development</param-value>

  </context-param>

 

第二步:

 

faces-config.xml中加上

 

 

        <application>

         <variable-resolver>

         org.springframework.web.jsf.DelegatingVariableResolver

         </variable-resolver>

        </application>

 

 

第三步:

在BackBean中以注解的形式添加依赖,这一步是关键步骤。

经过我的实验我得到了我认为的最佳配置BackBean的方式。

service和entity照旧由spring管理,只不过如果你不想额外增加数据传输层(DTO)的话,那么需要把实体也暴露为jsf的受管bean。

如:

实体的配置

@ManagedBean    

@NoneScoped

 

@Entity

public class User {

@Id

@GeneratedValue(strategy=GenerationType.AUTO)

private long id;

......................略

 

backbean的配置

 

@ManagedBean

public class Hello {

@ManagedProperty(value="#{user}")

private User user;

@ManagedProperty("#{userServiceImpl}")     //可见spring的bean已经暴露给了jsf了,可以由el表达式访问到的受管bean了。这是的在页面上通过el表达式直接访问sevice业务层执行一些业务操作成为了可能,虽然我不赞成这么做。

private UserService userServiceImpl;

public String run(){

System.out.println(user.getName());

userServiceImpl.save(user);

return "succ";

}

 

.....................略

 

第四步:

像原来一样配置好spring的一切就行了。

 

JSF将是J2EE5.0中所包含的web开发框架,这应该是第一个成为jcp标准,并且随j2eesdk一起发布的web框架,可以看出sun对它的期望很高。JSF最大的竞争对手是tapestry,是apache的产品,但是apache又弄出了个myfaces,是对jsf标准的一个实现。也许你也我一样,在jsftapestry之间犹豫很久,将来从apache的态度上应该可以看出二者的走向。在tss上有一篇比较jsf 1.0tapestry 3.0的文章,内容很扎实到位:http://www.theserverside.com/articles/article.tss?l=JSFTapestry JSF的竞争对手不是struts/webwork之流,它们基本上已经是不同阶段上的东西了,放在一起比较意义不大。 JSF的开发流程asp.net中所倡导的code behind方式很相似,核心是事件驱动,组件标签的封装程度非常高,很多典型应用已经不需要开发者去处理http。页面操作会被自动映射到对应的java bean中,后台逻辑只需要同java bean发生交互。个过程是通过“依赖注入(DI)”来实现的,看来这是目前解偶合的最佳途径啊,spring的影响真是深远。不过正式因为jsf采用了这样的方式,导致开发工作以前的jsp/struts等都有非常大的不同,需要一定的时间去学习。学习之前建议先对依赖注入有比较清楚的认识,可以参考我的learn Spring in spring系列的第一篇。 本系列将以两个例子来讲解jsf的基本开发,第一个例子当然是hello world。目前可用的jsf ide不多,ibm要到06年才能放出支持jsf的wtp版本。所以我们的例子基本以手写为主,这样也能让我们有更清楚的认识,同时推荐目前最好的jsf开发工具:myeclipse 4.0 GA。后面的例子将会有jsfhibernate的内容,它都能给予很好的支持。由于myeclipse并不免费,所以我们除了讲解在ide中如何操作外,还会叙述手动操作的具体内容,以免过于依赖开发工具。用什么服务器都可以,这里采用了jboss 4.0.2。如果你的服务器是高版本的tomcat(5.5+),那么必须要删除它自带的一些包才能很好的支持jsf,具体细节请查看它的文档。 请自行下载jsf riJSTL 1.1。 废话少说,开始了。 在myeclipse 4.0GA中新建一个web项目,命名为hello,为项目增加对JSTL的支持: 在JSTL的版本中选择1.1。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值