JSF2.0与Spring3的整合

来源:互联网 发布:联通4g是什么网络制式 编辑:程序博客网 时间:2024/04/28 12:54

关于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的一切就行了。

0 0
原创粉丝点击