Spirng 整合jsf backBean对象
2016-03-18 11:02
549 查看
步骤是非常简单的,主要有两条思路一是让所有的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的一切就行了。
步骤是非常简单的,主要有两条思路一是让所有的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的一切就行了。
相关文章推荐
- JSP的option动态绑定默认值
- Javascript的表单验证-揭开正则表达式的面纱
- 通过JavaScript定义函数的注意点
- JavaScript初探
- Javascript的表单验证-初识正则表达式
- 转载Django 传递数据给JSON
- Javascript的表单验证-提交表单
- JSON 之FastJson解析
- JSON 之FastJson解析
- Javascript的表单与验证-非空验证
- JS原型探索小记(一)
- javascript 变量作用域
- day12 jsp & el表达式 & jstl标签库
- (c#.net)前端js图片压缩将得到的base64字符串保存为图片
- js监听
- js的异步的问题的再次理解
- 获取结果集 json拼接
- JS window对象的top、parent、opener含义介绍
- javascript递归调用,产生堆栈溢出原因
- javascript 执行环境 变量对象